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 eaffd524b [#4962] feat(trino-connector): Support the Trino cascading
connector (#4935)
eaffd524b is described below
commit eaffd524b63f0498ec6a64e82928c53488ddd8ac
Author: Yuhui <[email protected]>
AuthorDate: Wed Sep 25 17:21:32 2024 +0800
[#4962] feat(trino-connector): Support the Trino cascading connector (#4935)
### What changes were proposed in this pull request?
Support the Trino cascading connector
### Why are the changes needed?
Fix: #4962
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Add some ut and Manually test
---
.../catalog/DefaultCatalogConnectorFactory.java | 35 +++++++--
.../jdbc/trino/TrinoClusterConnectorAdapter.java | 91 ++++++++++++++++++++++
.../jdbc/trino/TrinoClusterMetadataAdapter.java | 36 +++++++++
.../jdbc/trino/TrinoClusterPropertyMeta.java | 23 ++++++
.../jdbc/TestJDBCCatalogPropertyConverter.java | 73 -----------------
.../mysql/TestMySQLCatalogPropertyConverter.java | 64 +++++++++++++++
.../TestPostgreSQLCatalogPropertyConverter.java | 64 +++++++++++++++
.../TestTrinoClusterCatalogPropertyConverter.java | 58 ++++++++++++++
8 files changed, 366 insertions(+), 78 deletions(-)
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
index e9864fe0f..83f58cdf4 100644
---
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
@@ -26,6 +26,7 @@ import
org.apache.gravitino.trino.connector.catalog.hive.HiveConnectorAdapter;
import
org.apache.gravitino.trino.connector.catalog.iceberg.IcebergConnectorAdapter;
import
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLConnectorAdapter;
import
org.apache.gravitino.trino.connector.catalog.jdbc.postgresql.PostgreSQLConnectorAdapter;
+import
org.apache.gravitino.trino.connector.catalog.jdbc.trino.TrinoClusterConnectorAdapter;
import
org.apache.gravitino.trino.connector.catalog.memory.MemoryConnectorAdapter;
import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
import org.slf4j.Logger;
@@ -35,25 +36,49 @@ import org.slf4j.LoggerFactory;
public class DefaultCatalogConnectorFactory implements CatalogConnectorFactory
{
private static final Logger LOG =
LoggerFactory.getLogger(DefaultCatalogConnectorFactory.class);
+ private static final String HIVE_CONNECTOR_PROVIDER_NAME = "hive";
+ private static final String ICEBERG_CONNECTOR_PROVIDER_NAME =
"lakehouse-iceberg";
+ private static final String MEMORY_CONNECTOR_PROVIDER_NAME = "memory";
+ private static final String MYSQL_CONNECTOR_PROVIDER_NAME = "jdbc-mysql";
+ private static final String POSTGRESQL_CONNECTOR_PROVIDER_NAME =
"jdbc-postgresql";
+ private static final String TRINO_CLUSTER_CONNECTOR_PROVIDER_NAME =
"trino-cluster";
+
protected final HashMap<String, CatalogConnectorContext.Builder>
catalogBuilders =
new HashMap<>();
+ protected final String region;
public DefaultCatalogConnectorFactory(GravitinoConfig config) {
- catalogBuilders.put("hive", new CatalogConnectorContext.Builder(new
HiveConnectorAdapter()));
+ this.region = config.getRegion();
+
+ catalogBuilders.put(
+ HIVE_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new HiveConnectorAdapter()));
+ catalogBuilders.put(
+ MEMORY_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new MemoryConnectorAdapter()));
catalogBuilders.put(
- "memory", new CatalogConnectorContext.Builder(new
MemoryConnectorAdapter()));
+ ICEBERG_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new IcebergConnectorAdapter()));
catalogBuilders.put(
- "lakehouse-iceberg", new CatalogConnectorContext.Builder(new
IcebergConnectorAdapter()));
+ MYSQL_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new MySQLConnectorAdapter()));
catalogBuilders.put(
- "jdbc-mysql", new CatalogConnectorContext.Builder(new
MySQLConnectorAdapter()));
+ POSTGRESQL_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new PostgreSQLConnectorAdapter()));
catalogBuilders.put(
- "jdbc-postgresql", new CatalogConnectorContext.Builder(new
PostgreSQLConnectorAdapter()));
+ TRINO_CLUSTER_CONNECTOR_PROVIDER_NAME,
+ new CatalogConnectorContext.Builder(new
TrinoClusterConnectorAdapter()));
LOG.info("Start the DefaultCatalogConnectorFactory");
}
public CatalogConnectorContext.Builder createCatalogConnectorContextBuilder(
GravitinoCatalog catalog) {
String catalogProvider = catalog.getProvider();
+
+ if (!catalog.isSameRegion(region)) {
+ catalogProvider = TRINO_CLUSTER_CONNECTOR_PROVIDER_NAME;
+ }
+
CatalogConnectorContext.Builder builder =
catalogBuilders.get(catalogProvider);
if (builder == null) {
String message = String.format("Unsupported catalog provider %s.",
catalogProvider);
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterConnectorAdapter.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterConnectorAdapter.java
new file mode 100644
index 000000000..8bd67ebf9
--- /dev/null
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterConnectorAdapter.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.trino;
+
+import static
org.apache.gravitino.trino.connector.GravitinoErrorCode.GRAVITINO_MISSING_CONFIG;
+import static
org.apache.gravitino.trino.connector.catalog.jdbc.JDBCCatalogPropertyConverter.JDBC_CONNECTION_PASSWORD_KEY;
+import static
org.apache.gravitino.trino.connector.catalog.jdbc.JDBCCatalogPropertyConverter.JDBC_CONNECTION_URL_KEY;
+import static
org.apache.gravitino.trino.connector.catalog.jdbc.JDBCCatalogPropertyConverter.JDBC_CONNECTION_USER_KEY;
+
+import io.trino.spi.TrinoException;
+import io.trino.spi.session.PropertyMetadata;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.gravitino.trino.connector.catalog.CatalogConnectorAdapter;
+import
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
+import org.apache.gravitino.trino.connector.catalog.HasPropertyMeta;
+import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
+
+/**
+ * Support trino cluster connector. Transforming cluster connector
configuration and components into
+ * Gravitino connector.
+ */
+public class TrinoClusterConnectorAdapter implements CatalogConnectorAdapter {
+
+ private static final String CONNECTOR_CLUSTER = "trino";
+ public static final String TRINO_CLUSTER_URL_KEY =
"cloud.trino.connection-url";
+ public static final String TRINO_CLUSTER_USER_KEY =
"cloud.trino.connection-user";
+ public static final String TRINO_CLUSTER_PASSWORD_KEY =
"cloud.trino.connection-password";
+ public static final String TRINO_CLUSTER_DEFAULT_USER = "admin";
+
+ private final HasPropertyMeta propertyMetadata;
+
+ public TrinoClusterConnectorAdapter() {
+ this.propertyMetadata = new TrinoClusterPropertyMeta();
+ }
+
+ @Override
+ public Map<String, String> buildInternalConnectorConfig(GravitinoCatalog
catalog) {
+ Map<String, String> config = new HashMap<>();
+ String jdbcUrl = catalog.getProperty(TRINO_CLUSTER_URL_KEY, "");
+ if (StringUtils.isEmpty(jdbcUrl)) {
+ throw new TrinoException(
+ GRAVITINO_MISSING_CONFIG, "Missing jdbc url config for the cluster
catalog");
+ }
+ jdbcUrl += "/" + catalog.getName();
+ config.put(JDBC_CONNECTION_URL_KEY, jdbcUrl);
+
+ String user = catalog.getProperty(TRINO_CLUSTER_USER_KEY,
TRINO_CLUSTER_DEFAULT_USER);
+ config.put(JDBC_CONNECTION_USER_KEY, user);
+
+ String password = catalog.getProperty(TRINO_CLUSTER_PASSWORD_KEY, "");
+ config.put(JDBC_CONNECTION_PASSWORD_KEY, password);
+
+ return config;
+ }
+
+ @Override
+ public String internalConnectorName() {
+ return CONNECTOR_CLUSTER;
+ }
+
+ @Override
+ public CatalogConnectorMetadataAdapter getMetadataAdapter() {
+ return new TrinoClusterMetadataAdapter(
+ getTableProperties(), Collections.emptyList(),
Collections.emptyList());
+ }
+
+ @Override
+ public List<PropertyMetadata<?>> getTableProperties() {
+ return propertyMetadata.getTablePropertyMetadata();
+ }
+}
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterMetadataAdapter.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterMetadataAdapter.java
new file mode 100644
index 000000000..681a3a1c1
--- /dev/null
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterMetadataAdapter.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.trino;
+
+import io.trino.spi.session.PropertyMetadata;
+import java.util.List;
+import
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
+import org.apache.gravitino.trino.connector.util.GeneralDataTypeTransformer;
+
+/** Support Trino cluster connector for testing. */
+public class TrinoClusterMetadataAdapter extends
CatalogConnectorMetadataAdapter {
+
+ public TrinoClusterMetadataAdapter(
+ List<PropertyMetadata<?>> schemaProperties,
+ List<PropertyMetadata<?>> tableProperties,
+ List<PropertyMetadata<?>> columnProperties) {
+
+ super(schemaProperties, tableProperties, columnProperties, new
GeneralDataTypeTransformer());
+ }
+}
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterPropertyMeta.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterPropertyMeta.java
new file mode 100644
index 000000000..fa45c360a
--- /dev/null
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TrinoClusterPropertyMeta.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.trino;
+
+import org.apache.gravitino.trino.connector.catalog.HasPropertyMeta;
+
+public class TrinoClusterPropertyMeta implements HasPropertyMeta {}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/TestJDBCCatalogPropertyConverter.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/TestJDBCCatalogPropertyConverter.java
index b94c9e2a9..32fa27c21 100644
---
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/TestJDBCCatalogPropertyConverter.java
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/TestJDBCCatalogPropertyConverter.java
@@ -25,12 +25,7 @@ import static
org.apache.gravitino.trino.connector.catalog.jdbc.JDBCCatalogPrope
import com.google.common.collect.ImmutableMap;
import java.util.Map;
-import org.apache.gravitino.Catalog;
import org.apache.gravitino.catalog.property.PropertyConverter;
-import
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLConnectorAdapter;
-import
org.apache.gravitino.trino.connector.catalog.jdbc.postgresql.PostgreSQLConnectorAdapter;
-import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
-import org.apache.gravitino.trino.connector.metadata.TestGravitinoCatalog;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -63,72 +58,4 @@ public class TestJDBCCatalogPropertyConverter {
propertyConverter.gravitinoToEngineProperties(gravitinoPropertiesWithoutPassword);
});
}
-
- @Test
- @SuppressWarnings("unchecked")
- public void testBuildPostgreSqlConnectorProperties() throws Exception {
- String name = "test_catalog";
- Map<String, String> properties =
- ImmutableMap.<String, String>builder()
- .put("jdbc-url", "jdbc:postgresql://localhost:5432/test")
- .put("jdbc-user", "test")
- .put("jdbc-password", "test")
- .put("trino.bypass.join-pushdown.strategy", "EAGER")
- .put("unknown-key", "1")
- .put("trino.bypass.unknown-key", "1")
- .build();
- Catalog mockCatalog =
- TestGravitinoCatalog.mockCatalog(
- name, "jdbc-postgresql", "test catalog", Catalog.Type.RELATIONAL,
properties);
- PostgreSQLConnectorAdapter adapter = new PostgreSQLConnectorAdapter();
-
- Map<String, String> config =
- adapter.buildInternalConnectorConfig(new GravitinoCatalog("test",
mockCatalog));
-
- // test converted properties
- Assertions.assertEquals(config.get("connection-url"),
"jdbc:postgresql://localhost:5432/test");
- Assertions.assertEquals(config.get("connection-user"), "test");
- Assertions.assertEquals(config.get("connection-password"), "test");
-
- // test trino passing properties
- Assertions.assertEquals(config.get("join-pushdown.strategy"), "EAGER");
-
- // test unknown properties
- Assertions.assertNull(config.get("hive.unknown-key"));
- Assertions.assertNull(config.get("trino.bypass.unknown-key"));
- }
-
- @Test
- @SuppressWarnings("unchecked")
- public void testBuildMySqlConnectorProperties() throws Exception {
- String name = "test_catalog";
- Map<String, String> properties =
- ImmutableMap.<String, String>builder()
- .put("jdbc-url", "jdbc:mysql://localhost:5432/test")
- .put("jdbc-user", "test")
- .put("jdbc-password", "test")
- .put("trino.bypass.join-pushdown.strategy", "EAGER")
- .put("unknown-key", "1")
- .put("trino.bypass.unknown-key", "1")
- .build();
- Catalog mockCatalog =
- TestGravitinoCatalog.mockCatalog(
- name, "jdbc-postgresql", "test catalog", Catalog.Type.RELATIONAL,
properties);
- MySQLConnectorAdapter adapter = new MySQLConnectorAdapter();
-
- Map<String, String> config =
- adapter.buildInternalConnectorConfig(new GravitinoCatalog("test",
mockCatalog));
-
- // test converted properties
- Assertions.assertEquals(config.get("connection-url"),
"jdbc:mysql://localhost:5432/test");
- Assertions.assertEquals(config.get("connection-user"), "test");
- Assertions.assertEquals(config.get("connection-password"), "test");
-
- // test trino passing properties
- Assertions.assertEquals(config.get("join-pushdown.strategy"), "EAGER");
-
- // test unknown properties
- Assertions.assertNull(config.get("hive.unknown-key"));
- Assertions.assertNull(config.get("trino.bypass.unknown-key"));
- }
}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
new file mode 100644
index 000000000..6d108d55a
--- /dev/null
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLCatalogPropertyConverter.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import org.apache.gravitino.Catalog;
+import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
+import org.apache.gravitino.trino.connector.metadata.TestGravitinoCatalog;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class TestMySQLCatalogPropertyConverter {
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void testBuildMySqlConnectorProperties() throws Exception {
+ String name = "test_catalog";
+ Map<String, String> properties =
+ ImmutableMap.<String, String>builder()
+ .put("jdbc-url", "jdbc:mysql://localhost:5432/test")
+ .put("jdbc-user", "test")
+ .put("jdbc-password", "test")
+ .put("trino.bypass.join-pushdown.strategy", "EAGER")
+ .put("unknown-key", "1")
+ .put("trino.bypass.unknown-key", "1")
+ .build();
+ Catalog mockCatalog =
+ TestGravitinoCatalog.mockCatalog(
+ name, "jdbc-postgresql", "test catalog", Catalog.Type.RELATIONAL,
properties);
+ MySQLConnectorAdapter adapter = new MySQLConnectorAdapter();
+
+ Map<String, String> config =
+ adapter.buildInternalConnectorConfig(new GravitinoCatalog("test",
mockCatalog));
+
+ // test converted properties
+ Assertions.assertEquals(config.get("connection-url"),
"jdbc:mysql://localhost:5432/test");
+ Assertions.assertEquals(config.get("connection-user"), "test");
+ Assertions.assertEquals(config.get("connection-password"), "test");
+
+ // test trino passing properties
+ Assertions.assertEquals(config.get("join-pushdown.strategy"), "EAGER");
+
+ // test unknown properties
+ Assertions.assertNull(config.get("hive.unknown-key"));
+ Assertions.assertNull(config.get("trino.bypass.unknown-key"));
+ }
+}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/postgresql/TestPostgreSQLCatalogPropertyConverter.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/postgresql/TestPostgreSQLCatalogPropertyConverter.java
new file mode 100644
index 000000000..c37aa223f
--- /dev/null
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/postgresql/TestPostgreSQLCatalogPropertyConverter.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.postgresql;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import org.apache.gravitino.Catalog;
+import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
+import org.apache.gravitino.trino.connector.metadata.TestGravitinoCatalog;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class TestPostgreSQLCatalogPropertyConverter {
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void testBuildPostgreSqlConnectorProperties() throws Exception {
+ String name = "test_catalog";
+ Map<String, String> properties =
+ ImmutableMap.<String, String>builder()
+ .put("jdbc-url", "jdbc:postgresql://localhost:5432/test")
+ .put("jdbc-user", "test")
+ .put("jdbc-password", "test")
+ .put("trino.bypass.join-pushdown.strategy", "EAGER")
+ .put("unknown-key", "1")
+ .put("trino.bypass.unknown-key", "1")
+ .build();
+ Catalog mockCatalog =
+ TestGravitinoCatalog.mockCatalog(
+ name, "jdbc-postgresql", "test catalog", Catalog.Type.RELATIONAL,
properties);
+ PostgreSQLConnectorAdapter adapter = new PostgreSQLConnectorAdapter();
+
+ Map<String, String> config =
+ adapter.buildInternalConnectorConfig(new GravitinoCatalog("test",
mockCatalog));
+
+ // test converted properties
+ Assertions.assertEquals(config.get("connection-url"),
"jdbc:postgresql://localhost:5432/test");
+ Assertions.assertEquals(config.get("connection-user"), "test");
+ Assertions.assertEquals(config.get("connection-password"), "test");
+
+ // test trino passing properties
+ Assertions.assertEquals(config.get("join-pushdown.strategy"), "EAGER");
+
+ // test unknown properties
+ Assertions.assertNull(config.get("hive.unknown-key"));
+ Assertions.assertNull(config.get("trino.bypass.unknown-key"));
+ }
+}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TestTrinoClusterCatalogPropertyConverter.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TestTrinoClusterCatalogPropertyConverter.java
new file mode 100644
index 000000000..640fb56f5
--- /dev/null
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/trino/TestTrinoClusterCatalogPropertyConverter.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.gravitino.trino.connector.catalog.jdbc.trino;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import org.apache.gravitino.Catalog;
+import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
+import org.apache.gravitino.trino.connector.metadata.TestGravitinoCatalog;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class TestTrinoClusterCatalogPropertyConverter {
+
+ @Test
+ public void testBuildTrinoClusterConnectorProperties() throws Exception {
+ String name = "test_catalog";
+ Map<String, String> properties =
+ ImmutableMap.<String, String>builder()
+ .put("jdbc-url", "jdbc:mysql://localhost:5432/test")
+ .put("jdbc-user", "test")
+ .put("jdbc-password", "test")
+ .put("cloud.trino.connection-url", "jdbc:trino://localhost:8080")
+ .put("cloud.trino.connection-user", "admin")
+ .put("cloud.trino.connection-password", "123")
+ .build();
+ Catalog mockCatalog =
+ TestGravitinoCatalog.mockCatalog(
+ name, "postgresql", "test catalog", Catalog.Type.RELATIONAL,
properties);
+ TrinoClusterConnectorAdapter adapter = new TrinoClusterConnectorAdapter();
+
+ Map<String, String> config =
+ adapter.buildInternalConnectorConfig(new GravitinoCatalog("test",
mockCatalog));
+
+ // test the converted properties, it's generating connector configuration
by properties name
+ // with the prefix 'cluster.'
+ Assertions.assertEquals(
+ config.get("connection-url"), "jdbc:trino://localhost:8080/" +
mockCatalog.name());
+ Assertions.assertEquals(config.get("connection-user"), "admin");
+ Assertions.assertEquals(config.get("connection-password"), "123");
+ }
+}