ClickHouse / ClickHouse/clickhouse-java

[jdbc-v2] `DataLakeCatalog` is not present in `getSchemas()` result or avoid using `system.*` where possible.

未关闭
#2,907 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area:jdbc-metadata bug jdbc-v2
主要语言
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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。