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
}