This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new a7d959109d [branch-1.2][feature](multi-catalog) support trino jdbc catalog and jdbc external table (#18498) a7d959109d is described below commit a7d959109dbeb042b021b72f757477ee319014cb Author: yongkang.zhong <zhong...@qq.com> AuthorDate: Tue Apr 11 23:13:31 2023 +0800 [branch-1.2][feature](multi-catalog) support trino jdbc catalog and jdbc external table (#18498) --- .../org/apache/doris/catalog/JdbcResource.java | 4 ++ .../java/org/apache/doris/catalog/JdbcTable.java | 1 + .../java/org/apache/doris/catalog/OdbcTable.java | 9 +++- .../org/apache/doris/external/jdbc/JdbcClient.java | 48 ++++++++++++++++++++++ .../org/apache/doris/planner/JdbcScanNode.java | 3 +- gensrc/thrift/Types.thrift | 3 +- 6 files changed, 65 insertions(+), 3 deletions(-) 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 35e655526c..ad7d8dc0fd 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 @@ -68,6 +68,7 @@ public class JdbcResource extends Resource { public static final String JDBC_SQLSERVER = "jdbc:sqlserver"; 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 MYSQL = "MYSQL"; public static final String POSTGRESQL = "POSTGRESQL"; @@ -75,6 +76,7 @@ public class JdbcResource extends Resource { public static final String SQLSERVER = "SQLSERVER"; public static final String CLICKHOUSE = "CLICKHOUSE"; public static final String SAP_HANA = "SAP_HANA"; + public static final String TRINO = "TRINO"; public static final String JDBC_PROPERTIES_PREFIX = "jdbc."; public static final String JDBC_URL = "jdbc_url"; @@ -263,6 +265,8 @@ public class JdbcResource extends Resource { return CLICKHOUSE; } else if (url.startsWith(JDBC_SAP_HANA)) { return SAP_HANA; + } else if (url.startsWith(JDBC_TRINO)) { + return TRINO; } throw new DdlException("Unsupported jdbc database type, please check jdbcUrl: " + url); } 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 c9a36c0439..aeaa1fd60b 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 @@ -75,6 +75,7 @@ public class JdbcTable extends Table { tempMap.put("oracle", TOdbcTableType.ORACLE); tempMap.put("clickhouse", TOdbcTableType.CLICKHOUSE); tempMap.put("sap_hana", TOdbcTableType.SAP_HANA); + tempMap.put("trino", TOdbcTableType.TRINO); TABLE_TYPE_MAP = Collections.unmodifiableMap(tempMap); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java index c10bfacaa0..81ed59686a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java @@ -104,7 +104,12 @@ public class OdbcTable extends Table { private static String saphanaProperName(String name) { List<String> list = Arrays.asList(name.split("\\.")); - return list.stream().map(s -> "\"" + s.toUpperCase() + "\"").collect(Collectors.joining(".")); + return list.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(".")); + } + + private static String trinoProperName(String name) { + List<String> list = Arrays.asList(name.split("\\.")); + return list.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(".")); } public static String databaseProperName(TOdbcTableType tableType, String name) { @@ -121,6 +126,8 @@ public class OdbcTable extends Table { return clickhouseProperName(name); case SAP_HANA: return saphanaProperName(name); + case TRINO: + return trinoProperName(name); default: return name; } 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 c29b18dae0..fb5c6dd23c 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 @@ -194,6 +194,9 @@ public class JdbcClient { case JdbcResource.SAP_HANA: rs = stmt.executeQuery("SELECT SCHEMA_NAME FROM SYS.SCHEMAS WHERE HAS_PRIVILEGES = 'TRUE'"); break; + case JdbcResource.TRINO: + rs = stmt.executeQuery("SHOW SCHEMAS"); + break; default: throw new JdbcClientException("Not supported jdbc type"); } @@ -221,6 +224,7 @@ public class JdbcClient { case JdbcResource.ORACLE: case JdbcResource.SQLSERVER: case JdbcResource.SAP_HANA: + case JdbcResource.TRINO: databaseNames.add(conn.getSchema()); break; default: @@ -253,6 +257,7 @@ public class JdbcClient { case JdbcResource.CLICKHOUSE: case JdbcResource.SQLSERVER: case JdbcResource.SAP_HANA: + case JdbcResource.TRINO: rs = databaseMetaData.getTables(null, dbName, null, types); break; default: @@ -289,6 +294,7 @@ public class JdbcClient { case JdbcResource.CLICKHOUSE: case JdbcResource.SQLSERVER: case JdbcResource.SAP_HANA: + case JdbcResource.TRINO: rs = databaseMetaData.getTables(null, dbName, null, types); break; default: @@ -360,6 +366,7 @@ public class JdbcClient { case JdbcResource.CLICKHOUSE: case JdbcResource.SQLSERVER: case JdbcResource.SAP_HANA: + case JdbcResource.TRINO: rs = databaseMetaData.getColumns(null, dbName, tableName, null); break; default: @@ -407,6 +414,8 @@ public class JdbcClient { return sqlserverTypeToDoris(fieldSchema); case JdbcResource.SAP_HANA: return saphanaTypeToDoris(fieldSchema); + case JdbcResource.TRINO: + return trinoTypeToDoris(fieldSchema); default: throw new JdbcClientException("Unknown database type"); } @@ -795,6 +804,45 @@ public class JdbcClient { } } + public Type trinoTypeToDoris(JdbcFieldSchema fieldSchema) { + String trinoType = fieldSchema.getDataTypeName(); + if (trinoType.startsWith("decimal")) { + String[] split = trinoType.split("\\("); + String[] precisionAndScale = split[1].split(","); + int precision = Integer.parseInt(precisionAndScale[0]); + int scale = Integer.parseInt(precisionAndScale[1].substring(0, precisionAndScale[1].length() - 1)); + return createDecimalOrStringType(precision, scale); + } else if (trinoType.startsWith("char")) { + ScalarType charType = ScalarType.createType(PrimitiveType.CHAR); + charType.setLength(fieldSchema.columnSize); + return charType; + } else if (trinoType.startsWith("timestamp")) { + return ScalarType.createDatetimeV2Type(6); + } + switch (trinoType) { + case "integer": + return Type.INT; + case "bigint": + return Type.BIGINT; + case "smallint": + return Type.SMALLINT; + case "tinyint": + return Type.TINYINT; + case "double": + return Type.DOUBLE; + case "real": + return Type.FLOAT; + case "boolean": + return Type.BOOLEAN; + case "varchar": + return ScalarType.createStringType(); + case "date": + return ScalarType.createDateV2Type(); + default: + return Type.UNSUPPORTED; + } + } + private Type createDecimalOrStringType(int precision, int scale) { if (precision <= ScalarType.MAX_DECIMAL128_PRECISION) { if (!Config.enable_decimal_conversion && (precision > ScalarType.MAX_DECIMALV2_PRECISION diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java index 2749dcc213..c7bb47b7b7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java @@ -148,7 +148,8 @@ public class JdbcScanNode extends ScanNode { || jdbcType == TOdbcTableType.POSTGRESQL || jdbcType == TOdbcTableType.MONGODB || jdbcType == TOdbcTableType.CLICKHOUSE - || jdbcType == TOdbcTableType.SAP_HANA)) { + || jdbcType == TOdbcTableType.SAP_HANA + || jdbcType == TOdbcTableType.TRINO)) { sql.append(" LIMIT ").append(limit); } diff --git a/gensrc/thrift/Types.thrift b/gensrc/thrift/Types.thrift index f55f747126..6794433d7b 100644 --- a/gensrc/thrift/Types.thrift +++ b/gensrc/thrift/Types.thrift @@ -372,7 +372,8 @@ enum TOdbcTableType { REDIS, MONGODB, CLICKHOUSE, - SAP_HANA + SAP_HANA, + TRINO } struct TJdbcExecutorCtorParams { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org