跳转到主内容
跳转到主内容

连接到数据目录

上一节中,您通过直接传入存储路径来查询开放表格式的数据。在实际场景中,大多数组织会通过数据目录管理表元数据——它是一个集中式注册表,用于跟踪表的位置、模式和分区。当您使用 DataLakeCatalog 数据库引擎将 ClickHouse 连接到目录时,整个目录都会作为一个 ClickHouse 数据库公开出来。目录中的每个表都会自动显示,并且可以使用完整的 ClickHouse SQL 进行查询——无需了解各个表的具体路径,也无需为每个表单独管理凭据。

本指南将逐步介绍如何连接到 Databricks Unity Catalog。ClickHouse 还支持以下目录——完整的设置说明请参阅相应的参考指南:

CatalogReference guide
AWS GlueAWS Glue 目录
Iceberg REST CatalogREST 目录
LakekeeperLakekeeper 目录
Project NessieNessie 目录
Microsoft OneLakeFabric OneLake

连接到 Unity Catalog

Beta feature. Learn more.

这里以 Unity Catalog 为例。

Databricks Unity Catalog 为 Databricks lakehouse 数据提供集中治理。

Databricks 的 lakehouse 支持多种数据格式。借助 ClickHouse,您可以以 Delta 和 Iceberg 两种格式查询 Unity Catalog 表。

注意

与 Unity Catalog 的集成适用于托管表和外部表。 该集成目前仅支持 AWS。

在 Databricks 中配置 Unity

要允许 ClickHouse 与 Unity Catalog 交互,您需要确保 Unity Catalog 已配置为允许外部读取器访问。可按照“启用对 Unity Catalog 的外部数据访问”指南进行配置。

除了启用外部访问外,还要确保负责配置该集成的主体对包含这些表的 schema 具有 EXTERNAL USE SCHEMA 权限

完成目录配置后,您必须为 ClickHouse 生成凭证。根据您与 Unity 的交互方式,可使用以下两种不同的方法:

  • 对于 Iceberg 客户端,使用服务主体进行身份验证。

  • 对于 Delta 客户端,使用个人访问令牌 (PAT) 。

连接到目录

使用这些凭据,您可以连接到相应的端点,查询 Iceberg 或 Delta 表。

应使用 Unity Catalog 访问 Delta 格式的数据。

SET allow_experimental_database_unity_catalog = 1;

CREATE DATABASE unity
ENGINE = DataLakeCatalog('https://<workspace-id>.cloud.databricks.com/api/2.1/unity-catalog')
SETTINGS warehouse = 'CATALOG_NAME', catalog_credential = '<PAT>', catalog_type = 'unity';

列出表

建立与目录的连接后,您可以列出其中的表。

SHOW TABLES FROM unity

┌─name───────────────────────────────────────────────┐
│ unity.logs                                         │
│ unity.single_day_log                               │
└────────────────────────────────────────────────────┘

31 rows in set.

查看表结构

我们可以使用标准的 SHOW CREATE TABLE 命令来查看这些表的创建方式。

需要使用反引号

请注意,需要指定命名空间和表名,并用反引号括起来;ClickHouse 不支持多个命名空间。

以下内容假定查询的是 REST Iceberg catalog:

SHOW CREATE TABLE unity.`icebench.single_day_log`

CREATE TABLE unity.`icebench.single_day_log`
(
    `pull_request_number` Nullable(Int64),
    `commit_sha` Nullable(String),
    `check_start_time` Nullable(DateTime64(6, 'UTC')),
    `check_name` Nullable(String),
    `instance_type` Nullable(String),
    `instance_id` Nullable(String),
    `event_date` Nullable(Date32),
    `event_time` Nullable(DateTime64(6, 'UTC')),
    `event_time_microseconds` Nullable(DateTime64(6, 'UTC')),
    `thread_name` Nullable(String),
    `thread_id` Nullable(Decimal(20, 0)),
    `level` Nullable(String),
    `query_id` Nullable(String),
    `logger_name` Nullable(String),
    `message` Nullable(String),
    `revision` Nullable(Int64),
    `source_file` Nullable(String),
    `source_line` Nullable(Decimal(20, 0)),
    `message_format_string` Nullable(String)
)
ENGINE = Iceberg('s3://...')

查询表

支持所有 ClickHouse 函数。同样,命名空间和表名都应使用反引号括起来。


SELECT count()
FROM unity.`icebench.single_day_log`

┌───count()─┐
│ 282634391 │ -- 282.63 million
└───────────┘

1 row in set. Elapsed: 1.265 sec.

有关完整的设置说明,请参阅 Unity Catalog 参考指南