diff --git a/docs/en/docs/lakehouse/external-table/jdbc.md b/docs/en/docs/lakehouse/external-table/jdbc.md index 6f6695b3dc..66ebcfdbbf 100644 --- a/docs/en/docs/lakehouse/external-table/jdbc.md +++ b/docs/en/docs/lakehouse/external-table/jdbc.md @@ -234,6 +234,9 @@ PROPERTIES ( ); ``` +**Note:** + Connections using the Presto JDBC Driver are also supported + #### 8.OceanBase Test | OceanBase Version | OceanBase JDBC Driver Version | diff --git a/docs/en/docs/lakehouse/multi-catalog/jdbc.md b/docs/en/docs/lakehouse/multi-catalog/jdbc.md index 3c2606194f..7307149764 100644 --- a/docs/en/docs/lakehouse/multi-catalog/jdbc.md +++ b/docs/en/docs/lakehouse/multi-catalog/jdbc.md @@ -177,7 +177,7 @@ CREATE CATALOG hana_catalog PROPERTIES ( | Database | Schema | | Table | Table | -8. Trino +8. Trino/Presto @@ -192,6 +192,9 @@ CREATE CATALOG trino_catalog PROPERTIES ( ); ``` +**Note:** + Connections using the Presto JDBC Driver are also supported + When Trino is mapped, Doris's Database corresponds to a Schema in Trino that specifies Catalog (such as "hive" in the 'jdbc_url' parameter in the example). The Table in Doris's Database corresponds to the Tables in Trino's Schema. That is, the mapping relationship is as follows: | Doris | Trino | @@ -455,7 +458,7 @@ The transaction mechanism ensures the atomicity of data writing to JDBC External | NCHAR | CHAR | | | Other | UNSUPPORTED | | -### Trino +### Trino/presto | Trino Type | Doris Type | Comment | |------------------------------------------------------|--------------------------|--------------------------------------------------------------------------------------------------------------------| diff --git a/docs/zh-CN/docs/lakehouse/external-table/jdbc.md b/docs/zh-CN/docs/lakehouse/external-table/jdbc.md index 0aec57b9f6..a43858be99 100644 --- a/docs/zh-CN/docs/lakehouse/external-table/jdbc.md +++ b/docs/zh-CN/docs/lakehouse/external-table/jdbc.md @@ -228,6 +228,9 @@ PROPERTIES ( ); ``` +**注意:** + 同样支持使用 Presto JDBC Driver 进行连接 + #### 8.OceanBase测试 | OceanBase 版本 | OceanBase JDBC驱动版本 | diff --git a/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md b/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md index 78292960ff..c0d3c31fd6 100644 --- a/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md +++ b/docs/zh-CN/docs/lakehouse/multi-catalog/jdbc.md @@ -178,7 +178,7 @@ CREATE CATALOG hana_catalog PROPERTIES ( | Database | Schema | | Table | Table | -8. Trino +8. Trino/Presto @@ -201,6 +201,9 @@ CREATE CATALOG trino_catalog PROPERTIES ( | Database | Schema | | Table | Table | +**注意:** + 同样支持使用 Presto JDBC Driver 进行连接 + 9. OceanBase @@ -453,7 +456,7 @@ set enable_odbc_transcation = true; | CHAR | CHAR | | | NCHAR | CHAR | | -### Trino +### Trino/Presto | Trino Type | Doris Type | Comment | |------------------------------------------------------|--------------------------|---------------------------------------------------------------------------| @@ -472,7 +475,7 @@ set enable_odbc_transcation = true; | array | ARRAY | Array内部类型适配逻辑参考上述类型,不支持嵌套类型 | | others | UNSUPPORTED | | -**Note:** +**注意:** 目前仅针对Trino连接的Hive做了测试,其他的Trino连接的数据源暂时未测试。 ### OceanBase diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java index 3220b69b58..2a736b4ddb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java @@ -69,6 +69,7 @@ public class JdbcResource extends Resource { public static final String JDBC_CLICKHOUSE = "jdbc:clickhouse"; public static final String JDBC_SAP_HANA = "jdbc:sap"; public static final String JDBC_TRINO = "jdbc:trino"; + public static final String JDBC_PRESTO = "jdbc:presto"; public static final String JDBC_OCEANBASE = "jdbc:oceanbase"; public static final String MYSQL = "MYSQL"; @@ -78,6 +79,7 @@ public class JdbcResource extends Resource { public static final String CLICKHOUSE = "CLICKHOUSE"; public static final String SAP_HANA = "SAP_HANA"; public static final String TRINO = "TRINO"; + public static final String PRESTO = "PRESTO"; public static final String OCEANBASE = "OCEANBASE"; public static final String OCEANBASE_ORACLE = "OCEANBASE_ORACLE"; @@ -280,6 +282,8 @@ public class JdbcResource extends Resource { return SAP_HANA; } else if (url.startsWith(JDBC_TRINO)) { return TRINO; + } else if (url.startsWith(JDBC_PRESTO)) { + return PRESTO; } else if (url.startsWith(JDBC_OCEANBASE)) { if (oceanbaseMode == null || oceanbaseMode.isEmpty()) { throw new DdlException("OceanBase mode must be specified for OceanBase databases" diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java index 3e28529f46..04dca97e5d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcTable.java @@ -77,6 +77,7 @@ public class JdbcTable extends Table { tempMap.put("clickhouse", TOdbcTableType.CLICKHOUSE); tempMap.put("sap_hana", TOdbcTableType.SAP_HANA); tempMap.put("trino", TOdbcTableType.TRINO); + tempMap.put("presto", TOdbcTableType.PRESTO); tempMap.put("oceanbase", TOdbcTableType.OCEANBASE); tempMap.put("oceanbase_oracle", TOdbcTableType.OCEANBASE_ORACLE); TABLE_TYPE_MAP = Collections.unmodifiableMap(tempMap); @@ -294,6 +295,10 @@ public class JdbcTable extends Table { driverUrl = jdbcResource.getProperty(DRIVER_URL); checkSum = jdbcResource.getProperty(CHECK_SUM); + if (!jdbcTypeName.equalsIgnoreCase(jdbcUrl.split(":")[1])) { + throw new DdlException("property " + TABLE_TYPE + " must be same with resource url"); + } + // get oceanbase_mode String oceanbaseMode = jdbcResource.getProperty("oceanbase_mode"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java index 67d167500f..0eac3a0514 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java @@ -211,6 +211,7 @@ public class JdbcClient { rs = stmt.executeQuery("SELECT SCHEMA_NAME FROM SYS.SCHEMAS WHERE HAS_PRIVILEGES = 'TRUE'"); break; case JdbcResource.TRINO: + case JdbcResource.PRESTO: rs = stmt.executeQuery("SHOW SCHEMAS"); break; default: @@ -256,6 +257,7 @@ public class JdbcClient { case JdbcResource.SQLSERVER: case JdbcResource.SAP_HANA: case JdbcResource.TRINO: + case JdbcResource.PRESTO: case JdbcResource.OCEANBASE_ORACLE: databaseNames.add(conn.getSchema()); break; @@ -295,6 +297,7 @@ public class JdbcClient { rs = databaseMetaData.getTables(null, dbName, null, types); break; case JdbcResource.TRINO: + case JdbcResource.PRESTO: rs = databaseMetaData.getTables(catalogName, dbName, null, types); break; default: @@ -337,6 +340,7 @@ public class JdbcClient { rs = databaseMetaData.getTables(null, dbName, null, types); break; case JdbcResource.TRINO: + case JdbcResource.PRESTO: rs = databaseMetaData.getTables(catalogName, dbName, null, types); break; default: @@ -414,6 +418,7 @@ public class JdbcClient { rs = databaseMetaData.getColumns(null, dbName, tableName, null); break; case JdbcResource.TRINO: + case JdbcResource.PRESTO: rs = databaseMetaData.getColumns(catalogName, dbName, tableName, null); break; default: @@ -464,6 +469,7 @@ public class JdbcClient { case JdbcResource.SAP_HANA: return saphanaTypeToDoris(fieldSchema); case JdbcResource.TRINO: + case JdbcResource.PRESTO: return trinoTypeToDoris(fieldSchema); default: throw new JdbcClientException("Unknown database type"); diff --git a/gensrc/thrift/Types.thrift b/gensrc/thrift/Types.thrift index 3b08f56b79..bce407a77a 100644 --- a/gensrc/thrift/Types.thrift +++ b/gensrc/thrift/Types.thrift @@ -389,6 +389,7 @@ enum TOdbcTableType { CLICKHOUSE, SAP_HANA, TRINO, + PRESTO, OCEANBASE, OCEANBASE_ORACLE }