JDBC Catalog创建失败

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】
在测试环境(3.2.3-a40e2f8 版本上),曾经创建成功过一次。按照官方文档进行修改,目标数据库为MSSQL

CREATE EXTERNAL CATALOG DataCenter
COMMENT ‘MSSQL DataCenter’
PROPERTIES
(
“type”=“jdbc”,
“user”=“user”,
“password”=“password”,
“jdbc_uri”=“jdbc:sqlserver://infodb;DatabaseName=DataCenter;Encrypt=False”,
“driver_url”=“file:///opt/JDBCDriver/mssql-jdbc-12.6.0.jre11.jar”,
“driver_class”=“com.microsoft.sqlserver.jdbc.SQLServerDriver”
);
SHOW RESOURCES;
image
可以看到如上信息。

SHOW CATALOGS;
image
只有默认catalog

新建外部表后,无报错,执行:SELECT * from TableTest
其BE的plugin中,也有对应的jar包
image

我用同样的办法,在生产环境(版本3.2.1)上按照上述同样的步骤执行,在创建外部表时,会报:
1064 - Unexpected exception: jdbc resource [DataCenter] not exists

执行SHOW DATABASES FROM DataCenter;
会报1064 - doesn’t find class: com.microsoft.sqlserver.jdbc.SQLServerDriver

此时,其BE的plugin中,确实没有jar包

且,SHOW RESOURCES;为空
image

SHOW CATALOGS;有新建的catalog
image

后来我将生产环境升级到了3.2.6-2585333,以为低版本可能有问题。
但是,该问题依然存在。

接着,我在测试环境(3.2.3-a40e2f8)再新建一个新的catalog
CREATE EXTERNAL CATALOG JYDB
COMMENT ‘MSSQL JYDB’
PROPERTIES
(
“type”=“jdbc”,
“user”=“username”,
“password”=“password”,
“jdbc_uri”=“jdbc:sqlserver://basedb;DatabaseName=jydb;Encrypt=False”,
“driver_url”=“file:///opt/JDBCDriver/mssql-jdbc-12.6.0.jre11.jar”,
“driver_class”=“com.microsoft.sqlserver.jdbc.SQLServerDriver”
);

新的JYDB也出现了同上的情况,外部表无法创建,jdbc resource [JYDB] not exists

目前不确定是哪个配置出现了问题,还请协助。

很神奇的是,我通过CREATE EXTERNAL RESOURCE可以实现了
CREATE EXTERNAL RESOURCE DataCenter
PROPERTIES (
“type”=“jdbc”,
“user”=“user”,
“password”=“password”,
“jdbc_uri”=“jdbc:sqlserver://infodb;databaseName=DataCenter;Encrypt=False”,
“driver_url”=“file:///opt/JDBCDriver/mssql-jdbc-12.6.0.jre11.jar”,
“driver_class”=“com.microsoft.sqlserver.jdbc.SQLServerDriver”
);

那就是意味着,创建CATALOG 不会自动创建RESOURCE,需要自己创建,难道是配置问题?

resource和catalog是不一样的,是两种连接方式

当前 jdbc catalog还不支持连接sqlserver,jdbc resource支持连接sqlserver

这个有点像mssql-jdbc-12.6.0.jre11.jar包不对,我用mysql-jdbc8的包成功了

1赞

请问一下,我用这种方式创建了external resource之后,再根据该resource创建外部表,创建的时候是提示创建成功的。但是从创建的外部表select数据时,报错,查看fe的日志为:
[Coordinator.getNext():1395] get next fail, need cancel. status errorCode INTERNAL_ERROR open JDBCScanner failed, error: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: The connection is closed.[com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:595), com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:574), com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115), com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81), com.starrocks.jdbcbridge.JDBCScanner.lambda$open$0(JDBCScanner.java:57), com.starrocks.jdbcbridge.DataSourceCache.lambda$getSource$0(DataSourceCache.java:33), java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688), com.starrocks.jdbcbridge.DataSourceCache.getSource(DataSourceCache.java:33), com.starrocks.jdbcbridge.JDBCScanner.open(JDBCScanner.java:48)], query id: d9cb349c-1573-11ef-b32c-005056a2741c
2024-05-19 08:08:00,008 WARN (starrocks-mysql-nio-pool-2124|405447) [Coordinator.updateStatus():1375] one instance report fail throw updateStatus(), need cancel. job id: -1, query id: d9cb349c-1573-11ef-b32c-005056a2741c, instance id: NaN

你好,请问一下是用mysql-jdbc8创建成功了EXTERNAL CATALOG吗

是的。

CREATE EXTERNAL CATALOG tmp
PROPERTIES
(
“type”=“jdbc”,
“user”=“xxxxx”,
“password”=“xxxxx”,
“jdbc_uri”=“jdbc:mysql://xxxxx:9030”,
“driver_url”=“file:///u/starrocks/jdbc/mysql-connector-java-8.0.28.jar”,
“driver_class”=“com.mysql.cj.jdbc.Driver”
);