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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]