This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 6647775c43 [#10075] feat(web): Add frontend support for Hologres JDBC
catalog (#10070)
6647775c43 is described below
commit 6647775c4317ebed1304f8c7c421ae1c0ac58510
Author: Ye Ding <[email protected]>
AuthorDate: Wed Mar 11 19:09:07 2026 +0800
[#10075] feat(web): Add frontend support for Hologres JDBC catalog (#10070)
### What changes were proposed in this pull request?
Add Hologres catalog support to v2 Web UIs:
**Web v2 (`web-v2/`):**
- Corresponding icon, provider config, column type mapping, and table
property info files
### Why are the changes needed?
Enables users to browse and manage Hologres catalogs through the
Gravitino Web UI.
Fix: https://github.com/apache/gravitino/issues/10075
### Does this PR introduce _any_ user-facing change?
Yes. Hologres catalogs are now visible and manageable in the Gravitino
Web UI.
### How was this patch tested?
Manual UI verification.
---
docs/manage-relational-metadata-using-gravitino.md | 6 +++
web-v2/web/src/app/catalogs/TreeComponent.js | 16 ++++++++
.../catalogs/rightContent/CreateCatalogDialog.js | 2 +
.../entitiesContent/CatalogDetailsPage.js | 2 +
web-v2/web/src/components/Icons.js | 20 ++++++++++
web-v2/web/src/config/catalog.js | 46 ++++++++++++++++++++++
web-v2/web/src/lib/icons/svg/hologres.svg | 1 +
7 files changed, 93 insertions(+)
diff --git a/docs/manage-relational-metadata-using-gravitino.md
b/docs/manage-relational-metadata-using-gravitino.md
index bc68a4db57..e62d914dac 100644
--- a/docs/manage-relational-metadata-using-gravitino.md
+++ b/docs/manage-relational-metadata-using-gravitino.md
@@ -24,6 +24,7 @@ For more details, please refer to the related doc.
- [**Apache Doris**](./jdbc-doris-catalog.md)
- [**StarRocks**](./jdbc-starrocks-catalog.md)
- [**OceanBase**](./jdbc-oceanbase-catalog.md)
+- [**Hologres**](./jdbc-hologres-catalog.md)
- [**ClickHouse**](./jdbc-clickhouse-catalog.md)
- [**Hologres**](./jdbc-hologres-catalog.md)
- [**Apache Iceberg**](./lakehouse-iceberg-catalog.md)
@@ -129,6 +130,7 @@ Currently, Gravitino supports the following catalog
providers:
| `jdbc-postgresql` | [PostgreSQL catalog
property](./jdbc-postgresql-catalog.md#catalog-properties) |
| `jdbc-doris` | [Doris catalog
property](./jdbc-doris-catalog.md#catalog-properties) |
| `jdbc-oceanbase` | [OceanBase catalog
property](./jdbc-oceanbase-catalog.md#catalog-properties) |
+| `jdbc-hologres` | [Hologres catalog
property](./jdbc-hologres-catalog.md#catalog-properties) |
| `jdbc-starrocks` | [StarRocks catalog
property](./jdbc-starrocks-catalog.md#catalog-properties) |
| `jdbc-clickhouse` | [ClickHouse catalog
property](./jdbc-clickhouse-catalog.md#catalog-properties) |
| `jdbc-hologres` | [Hologres catalog
property](./jdbc-hologres-catalog.md#catalog-properties) |
@@ -516,6 +518,7 @@ Currently, Gravitino supports the following schema property:
| `jdbc-postgresql` | [PostgreSQL schema
property](./jdbc-postgresql-catalog.md#schema-properties) |
| `jdbc-doris` | [Doris schema
property](./jdbc-doris-catalog.md#schema-properties) |
| `jdbc-oceanbase` | [OceanBase schema
property](./jdbc-oceanbase-catalog.md#schema-properties) |
+| `jdbc-hologres` | [Hologres schema
property](./jdbc-hologres-catalog.md#schema-properties) |
| `jdbc-starrocks` | [StarRocks schema
property](./jdbc-starrocks-catalog.md#schema-properties) |
| `jdbc-clickhouse` | [ClickHouse schema
property](./jdbc-clickhouse-catalog.md#schema-properties) |
| `jdbc-hologres` | [Hologres schema
property](./jdbc-hologres-catalog.md#schema-properties) |
@@ -998,6 +1001,7 @@ The following is a table of the column default value that
Gravitino supports for
| `jdbc-postgresql` | ✔ |
| `jdbc-doris` | ✔ |
| `jdbc-oceanbase` | ✔ |
+| `jdbc-hologres` | ✔ |
| `jdbc-starrocks` | ✔ |
| `jdbc-clickhouse` | ✔ |
| `jdbc-hologres` | ✔ |
@@ -1018,6 +1022,7 @@ The following table shows the column auto-increment that
Gravitino supports for
| `jdbc-postgresql` | ✔
|
| `jdbc-doris` | ✘
|
| `jdbc-oceanbase` |
✔([limitations](./jdbc-oceanbase-catalog.md#table-column-auto-increment))
|
+| `jdbc-hologres` | ✘
|
| `jdbc-starrocks` | ✔
|
| `jdbc-clickhouse` | ✘
|
| `jdbc-hologres` | ✘
|
@@ -1037,6 +1042,7 @@ The following is the table property that Gravitino
supports:
| `jdbc-postgresql` | [PostgreSQL table
property](./jdbc-postgresql-catalog.md#table-properties)
| [PostgreSQL type
mapping](./jdbc-postgresql-catalog.md#table-column-types)
|
| `jdbc-doris` | [Doris table
property](./jdbc-doris-catalog.md#table-properties)
| [Doris type
mapping](./jdbc-doris-catalog.md#table-column-types)
|
| `jdbc-oceanbase` | [OceanBase table
property](./jdbc-oceanbase-catalog.md#table-properties)
| [OceanBase type
mapping](./jdbc-oceanbase-catalog.md#table-column-types)
|
+| `jdbc-hologres` | [Hologres table
property](./jdbc-hologres-catalog.md#table-properties)
| [Hologres type
mapping](./jdbc-hologres-catalog.md#table-column-types)
|
| `jdbc-starrocks` | [StarRocks table
property](./jdbc-starrocks-catalog.md#table-properties)
| [StarRocks type
mapping](./jdbc-starrocks-catalog.md#table-column-types)
|
| `jdbc-clickhouse` | [ClickHouse table
property](./jdbc-clickhouse-catalog.md#table-properties)
| [ClickHouse type
mapping](./jdbc-clickhouse-catalog.md#table-column-types)
|
| `jdbc-hologres` | [Hologres table
property](./jdbc-hologres-catalog.md#table-properties)
| [Hologres type
mapping](./jdbc-hologres-catalog.md#table-column-types)
|
diff --git a/web-v2/web/src/app/catalogs/TreeComponent.js
b/web-v2/web/src/app/catalogs/TreeComponent.js
index c023f5d3ef..ab7ed1e12b 100644
--- a/web-v2/web/src/app/catalogs/TreeComponent.js
+++ b/web-v2/web/src/app/catalogs/TreeComponent.js
@@ -151,6 +151,22 @@ export const TreeComponent = forwardRef(function
TreeComponent(props, ref) {
)}
</span>
)
+ case 'custom-icons-hologres':
+ return (
+ <span
+ role='img'
+ className='anticon'
+ onMouseEnter={e => onMouseEnter(e, catalog)}
+ onMouseLeave={e => onMouseLeave(e, catalog)}
+ onClick={e => handleClickIcon(e, catalog)}
+ >
+ {isHover !== key ? (
+ <Icons.hologres className='size-4'></Icons.hologres>
+ ) : (
+ <Icons.RotateCw className='h-4 w-3'></Icons.RotateCw>
+ )}
+ </span>
+ )
case 'custom-icons-oceanbase':
return (
<span
diff --git a/web-v2/web/src/app/catalogs/rightContent/CreateCatalogDialog.js
b/web-v2/web/src/app/catalogs/rightContent/CreateCatalogDialog.js
index b1dab97d56..b76b936024 100644
--- a/web-v2/web/src/app/catalogs/rightContent/CreateCatalogDialog.js
+++ b/web-v2/web/src/app/catalogs/rightContent/CreateCatalogDialog.js
@@ -343,6 +343,8 @@ export default function CreateCatalogDialog({ ...props }) {
return <Icons.paimon className={small ? 'size-6' :
'size-12'}></Icons.paimon>
case 'custom-icons-hudi':
return <Icons.hudi className={small ? 'size-6' :
'size-12'}></Icons.hudi>
+ case 'custom-icons-hologres':
+ return <Icons.hologres className={small ? 'size-6' :
'size-12'}></Icons.hologres>
case 'custom-icons-oceanbase':
return <Icons.oceanbase className={small ? 'size-6' :
'size-12'}></Icons.oceanbase>
case 'custom-icons-starrocks':
diff --git
a/web-v2/web/src/app/catalogs/rightContent/entitiesContent/CatalogDetailsPage.js
b/web-v2/web/src/app/catalogs/rightContent/entitiesContent/CatalogDetailsPage.js
index ca1dd8d71b..4314c6e73b 100644
---
a/web-v2/web/src/app/catalogs/rightContent/entitiesContent/CatalogDetailsPage.js
+++
b/web-v2/web/src/app/catalogs/rightContent/entitiesContent/CatalogDetailsPage.js
@@ -81,6 +81,8 @@ const renderIcon = catalog => {
return <Icons.paimon className='size-8'></Icons.paimon>
case 'custom-icons-hudi':
return <Icons.hudi className='size-8'></Icons.hudi>
+ case 'custom-icons-hologres':
+ return <Icons.hologres className='size-8'></Icons.hologres>
case 'custom-icons-oceanbase':
return <Icons.oceanbase className='size-8'></Icons.oceanbase>
case 'custom-icons-starrocks':
diff --git a/web-v2/web/src/components/Icons.js
b/web-v2/web/src/components/Icons.js
index e4c2c423a8..0995f2e1b0 100644
--- a/web-v2/web/src/components/Icons.js
+++ b/web-v2/web/src/components/Icons.js
@@ -369,6 +369,26 @@ const Icons = {
</g>
</svg>
),
+ hologres: props => (
+ <svg
+ t='1770608544870'
+ className='icon'
+ viewBox='0 0 1024 1024'
+ version='1.1'
+ xmlns='http://www.w3.org/2000/svg'
+ p-id='1571'
+ xmlnsXlink='http://www.w3.org/1999/xlink'
+ width='200'
+ height='200'
+ {...props}
+ >
+ <path
+ d='M768.384 742.5536l10.9056 1.8176c81.8176 10.9056 112.7168 29.0816
125.44 41.8048 7.2704 7.296 7.2704 12.7488 7.2704 16.384 0 23.6288-32.7168
41.8048-94.5408 54.528h-9.088c-61.824 10.9312-152.7296 16.384-285.44
18.176v-143.616h19.968c94.5664 0 167.296 3.6352 225.4848 10.9056z m-505.472
0v125.44h-3.6352c-50.8928-9.088-116.352-25.4464-140.0064-50.8928-5.4528-5.4528-7.2704-10.9056-7.2704-14.5408
0-3.6352 1.8176-7.2704 7.2704-12.7488l1.8176-1.792c10.9312-9.1136
27.2896-16.384 40.01 [...]
+ fill='#FF6A00'
+ p-id='1572'
+ ></path>
+ </svg>
+ ),
starrocks: props => (
<svg version='1.1' width='100' height='100' viewBox='0 0 100 100'
xmlns='http://www.w3.org/2000/svg' {...props}>
<g id='starrocks'>
diff --git a/web-v2/web/src/config/catalog.js b/web-v2/web/src/config/catalog.js
index e70a9a8e35..14baaf8976 100644
--- a/web-v2/web/src/config/catalog.js
+++ b/web-v2/web/src/config/catalog.js
@@ -35,6 +35,8 @@ export const checkCatalogIcon = ({ type, provider }) => {
return 'custom-icons-paimon'
case 'lakehouse-hudi':
return 'custom-icons-hudi'
+ case 'jdbc-hologres':
+ return 'custom-icons-hologres'
case 'jdbc-oceanbase':
return 'custom-icons-oceanbase'
case 'jdbc-starrocks':
@@ -640,6 +642,45 @@ export const providerBase = {
}
]
},
+ 'jdbc-hologres': {
+ label: 'Hologres',
+ defaultProps: [
+ {
+ label: 'JDBC Driver',
+ key: 'jdbc-driver',
+ value: 'org.postgresql.Driver',
+ required: true,
+ description: 'e.g. org.postgresql.Driver'
+ },
+ {
+ label: 'JDBC URL',
+ key: 'jdbc-url',
+ value: '',
+ required: true,
+ description: 'e.g. jdbc:postgresql://{ENDPOINT}:{PORT}/{DATABASE}'
+ },
+ {
+ label: 'JDBC User',
+ key: 'jdbc-user',
+ value: '',
+ required: true,
+ description: 'Alibaba Cloud AccessKey ID'
+ },
+ {
+ label: 'JDBC Password',
+ key: 'jdbc-password',
+ value: '',
+ required: true,
+ description: 'Alibaba Cloud AccessKey Secret'
+ },
+ {
+ label: 'JDBC Database',
+ key: 'jdbc-database',
+ value: '',
+ required: true
+ }
+ ]
+ },
'jdbc-oceanbase': {
label: 'OceanBase',
defaultProps: [
@@ -750,6 +791,11 @@ export const relationalProviders = [
value: 'jdbc-mysql',
description: 'A fully managed database service'
},
+ {
+ label: 'Hologres',
+ value: 'jdbc-hologres',
+ description: 'Real-time Data Warehouse'
+ },
{
label: 'OceanBase',
value: 'jdbc-oceanbase',
diff --git a/web-v2/web/src/lib/icons/svg/hologres.svg
b/web-v2/web/src/lib/icons/svg/hologres.svg
new file mode 100644
index 0000000000..8fdce95305
--- /dev/null
+++ b/web-v2/web/src/lib/icons/svg/hologres.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG
1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg
t="1770608544870" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="1571"
xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path
d="M768.384 742.5536l10.9056 1.8176c81.8176 10.9056 112.7168 29.0816 125.44
41.8048 7.2704 7.296 7.2704 12.7488 7.2704 16.384 0 23.6288-32.7168
41.8048-94.5408 54 [...]
\ No newline at end of file