ClickHouse / ClickHouse/clickhouse-java
[jdbc-v2] `DataLakeCatalog` is not present in `getSchemas()` result or avoid using `system.*` where possible.
- 主要语言
- Java
- 星标
- 1.6k
- 派生
- 636
- 平均合并
- 2 天 23 小时
- 30 天内合并 PR
- 29
描述
## Description
Databases with engine `DataLakeCatalog` are not visible when requested via `DataBaseMetadata` because driver uses `system.databases` to fetch this information.
Workaround: `show_data_lake_catalogs_in_system_tables=1` settings in session or profile.
## Note
As `SHOW DATABASES` return better information - JDBC Driver should make it at least an option.
## DBeaver and Metabase
When workaround applied these products getting exception trying to read tables information.
See https://clickhouse.com/docs/operations/settings/settings#database_datalake_require_metadata_access
```
2026-07-02T21:19:42+02:00 ERROR metabase.sync.fetch-metadata Error while fetching metadata with 'db-metadata',java.sql.SQLException: Code: 736. DB::Exception: Received error 736 while fetching table metadata for existing table 'product_analyst_team.vw_ap_integrations_2026'. If you want this error to be ignored, use database_datalake_require_metadata_access=0. Error: Code: 736. DB::Exception: Cannot read table `sandbox.product_analyst_team.vw_ap_integrations_2026` because it doesn't have storage location. It means that it's not a DeltaLake table, and it's unreadable with Unity catalog in ClickHouse. (..., at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:68), at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:43), at com.clickhouse.jdbc.StatementImpl.executeQueryImpl(StatementImpl.java:196), at com.clickhouse.jdbc.PreparedStatementImpl.executeQuery(PreparedStatementImpl.java:138), at com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl.getTables(DatabaseMetaDataImpl.java:998), at com.mchange.v2.c3p0.impl.NewProxyDatabaseMetaData.getTables(NewProxyDatabaseMetaData.java:4174), at metabase.driver.clickhouse_introspection$get_tables_from_metadata.invokeStatic(clickhouse_introspection.clj:109), at metabase.driver.clickhouse_introspection$get_tables_from_metadata.invoke(clickhouse_introspection.clj:107), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs$fn__173063.invoke(clickhouse_introspection.clj:128), at metabase.driver.clickhouse$fn__173529$fn__173531.invoke(clickhouse.clj:102), at metabase.driver.sql_jdbc.execute$do_with_resolved_connection.invokeStatic(execute.clj:366), at metabase.driver.sql_jdbc.execute$do_with_resolved_connection.invoke(execute.clj:338), at metabase.driver.clickhouse$fn__173529.invokeStatic(clickhouse.clj:79), at metabase.driver.clickhouse$fn__173529.invoke(clickhouse.clj:77), at clojure.lang.MultiFn.invoke(MultiFn.java:244), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs.invokeStatic(clickhouse_introspection.clj:125), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs.invoke(clickhouse_introspection.clj:119), at metabase.driver.clickhouse_introspection$fn__173076.invokeStatic(clickhouse_introspection.clj:170), at metabase.driver.clickhouse_introspection$fn__173076.invoke(clickhouse_introspection.clj:166)
2026-07-02T21:19:42+02:00 WARN metabase.sync.util Error in sync step Sync metadata for clickhouse Database 43 ''test-clickhouse-cloud'',java.sql.SQLException: Code: 736. DB::Exception: Received error 736 while fetching table metadata for existing table 'product_analyst_team.vw_ap_integrations_2026'. If you want this error to be ignored, use database_datalake_require_metadata_access=0. Error: Code: 736. DB::Exception: Cannot read table `sandbox.product_analyst_team.vw_ap_integrations_2026` because it doesn't have storage location. It means that it's not a DeltaLake table, and it's unreadable with Unity catalog in ClickHouse. (..., at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:68), at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:43), at com.clickhouse.jdbc.StatementImpl.executeQueryImpl(StatementImpl.java:196), at com.clickhouse.jdbc.PreparedStatementImpl.executeQuery(PreparedStatementImpl.java:138), at com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl.getTables(DatabaseMetaDataImpl.java:998), at com.mchange.v2.c3p0.impl.NewProxyDatabaseMetaData.getTables(NewProxyDatabaseMetaData.java:4174), at metabase.driver.clickhouse_introspection$get_tables_from_metadata.invokeStatic(clickhouse_introspection.clj:109), at metabase.driver.clickhouse_introspection$get_tables_from_metadata.invoke(clickhouse_introspection.clj:107), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs$fn__173063.invoke(clickhouse_introspection.clj:128), at metabase.driver.clickhouse$fn__173529$fn__173531.invoke(clickhouse.clj:102), at metabase.driver.sql_jdbc.execute$do_with_resolved_connection.invokeStatic(execute.clj:366), at metabase.driver.sql_jdbc.execute$do_with_resolved_connection.invoke(execute.clj:338), at metabase.driver.clickhouse$fn__173529.invokeStatic(clickhouse.clj:79), at metabase.driver.clickhouse$fn__173529.invoke(clickhouse.clj:77), at clojure.lang.MultiFn.invoke(MultiFn.java:244), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs.invokeStatic(clickhouse_introspection.clj:125), at metabase.driver.clickhouse_introspection$get_all_tables_in_all_dbs.invoke(clickhouse_introspection.clj:119), at metabase.driver.clickhouse_introspection$fn__173076.invokeStatic(clickhouse_introspection.clj:170), at metabase.driver.clickhouse_introspection$fn__173076.invoke(clickhouse_introspection.clj:166)
20
```
贡献指南
调研方向
从 JDBC DatabaseMetaData getSchemas() 和 getTables() 入口点开始,在使用 DataLakeCatalog 引擎的数据库上复现该问题。将当前的 system.databases 查询与 SHOW DATABASES 进行比较,并验证涉及 DataLakeCatalog 的元数据调用不会产生文档中说明的访问错误;当预期的选项或行为已由测试覆盖时,该 issue 即完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- java
- 领域
- backend-api-design, databases
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100