You need to enable JavaScript to run this app.
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
外部 Catalog
Iceberg Catalog
复制全文
Iceberg Catalog

Bytehouse 云数仓版支持接入 Iceberg Catalog,您无需手动创建外部数据库、表,可通过 Iceberg Catalog 直接查询 Iceberg 中的数据。本文将介绍如何创建和使用 Iceberg Catalog。

背景信息

Iceberg 支持多种不同的元数据存储形式,包括以下形式:

  • 自包含的形式存储在存储介质(如 S3 兼容对象存储服务)
  • 开源的 Hive metastore
  • 火山引擎 AI 数据湖服务 LAS

ByteHouse Iceberg 外部 Catalog 当前支持的 Iceberg 元数据存储形式包括 S3 兼容对象存储服务和 LAS,Iceberg 外部 Catalog 创建方式随使用的元数据存储服务不同而有所差异,您可根据实际使用的服务选择对应的创建方式。

前提条件

请根据您的 Iceberg 集群使用的元数据存储形式获取以下权限和连接信息。

元数据存储形式

所需权限和连接信息

S3 兼容对象存储服务

  • 获取 Iceberg 使用的 S3 兼容对象存储服务的访问权限。
  • Iceberg 的数仓连接地址。
  • 具有 S3 兼容对象存储服务访问权限的密钥 Access Key ID(AK)/Secret Access Key(SK)。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见 Access Key(密钥)管理
  • S3 兼容对象存储服务的 endpoint。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见地域和访问域名(Endpoint)中 S3 Endpoint 列。

LAS

  • LAS Catalog 的访问权限,以及库表级别读写权限,配置详情请参见 LAS 权限管理
  • 连接信息:
    • LAS 使用的 TOS 服务的 endpoint、访问密钥 Access Key ID(AK)/Secret Access Key(SK)。
    • LAS 使用的 TOS 存储服务的物理数据中心所在地域,常用地域列表请参见地域及访问域名
    • LAS 访问密钥 AK/SK,获取方式请参见 Access Key(密钥)管理
    • LAS Catalog 名称。
    • LAS 的元数据存储服务地址,常用地域对应的地址请参见链接地址

使用限制
  • 暂不支持在 Iceberg Catalog 内手动新增数据库、表,以及相关的 ALTER 操作。
  • Iceberg Catalog 要求 ByteHouse 引擎版本为 2.3.2.0 及以上。使用前请确认您的引擎版本满足此要求,可通过 ByteHouse 控制台的租户管理 > 基本信息页面查看当前引擎版本。如果您的引擎版本不符合要求,可提交工单,联系 ByteHouse 团队升级引擎。

创建 Iceberg Catalog

Iceberg 使用的元数据服务不同,对应的参数配置也会不同。本节将按元数据服务的类型,介绍 Iceberg Catalog 的创建方法。

S3

CREATE EXTERNAL CATALOG `{catalogName}`
PROPERTIES type='iceberg',
metastore_type='hadoop', 
warehouse='{warehouse}', 
endpoint='{endpoint}', 
ak_id='{accessKey}', 
ak_secret='{accessSecretKey}';

参数

配置说明

创建 Catalog 描述

{catalogName} 替换为您自定义的 Catalog 名称。

Catalog 参数

  • type='iceberg':固定为 iceberg。
  • metastore_type='hadoop':固定为 hadoop。
  • warehouse:将 {warehouse} 替换为 Iceberg 的数仓连接地址的顶层目录,例如:s3://test-dev-hcf/iceberg。如果您使用的是火山引擎对象存储服务 TOS,也需按照该格式填写。
  • endpoint:外部数据源的连接地址,例如,如果您使用的是火山引擎对象存储服务 TOS,可登录 TOS 控制台,通过桶列表 > 桶名称 > 概览 > 访问域名路径,查看所需 endpoint,如下图所示,endpoint 为tos-s3-cn-beijing.volces.com。常用 endpoint 列表请参见地域和访问域名(Endpoint)中的 S3 Endpoint 列。
    Image
  • ak_id/ak_secret:具有 S3 访问权限的密钥。如果您使用的是火山引擎对象存储服务 TOS,获取方式请参见 Access Key(密钥)管理

LAS

CREATE EXTERNAL CATALOG `{catalogName}` 
PROPERTIES
type='iceberg',
metastore_type='lf',
endpoint='{endpoint}', 
ak_id='{accessKey}', 
ak_secret='{accessSecretKey}', 
lf_metastore_ak_id='{lasAccessKey}',
lf_metastore_ak_secret='{lasAccessSecretKey}',
lf_metastore_catalog='{lasCatalogName}',
lf_metastore_region='{lasEndpoint}',
lf_metastore_url = '{lasUri}';

参数

配置说明

创建 Catalog 描述

{catalogName} 替换为您自定义的 Catalog 名称。

Catalog 参数

  • type='iceberg':固定为 iceberg。
  • metastore_type='lf':固定为 lf。
  • endpoint:LAS 使用的火山引擎对象存储服务 TOS 的 endpoint。您可登录 TOS 控制台,通过桶列表 > 桶名称 > 概览 > 访问域名路径,查看所需 endpoint,如下图所示,endpoint 为tos-s3-cn-beijing.volces.com。常用 endpoint 列表请参见地域和访问域名(Endpoint)中的 S3 Endpoint 列。
    Image
  • ak_id/ak_secret:配置为具有访问权限的 TOS 密钥,获取方式请参见 Access Key(密钥)管理
  • lf_metastore_ak_id/lf_metastore_ak_secret:配置为具有访问权限的 LAS 密钥,获取方式请参见 Access Key(密钥)管理
  • lf_metastore_catalog:请在此处填写您希望连接的、在 LAS 中已存在的 Catalog 的名称,以便 ByteHouse 能够定位到正确的外部数据目录。您可登录 LAS 控制台,在左侧导航栏中,单击数据库 > 元数据管理,查看 Catalog 名称。
  • lf_metastore_region:配置为 LAS 使用的 TOS 存储服务的物理数据中心所在地域,常用地域名请参见地域及访问域名
  • lf_metastore_url:配置为 LAS 的元数据存储服务地址,可填写为 thrift://lakeformation.las.{REGION}.ivolces.com:48869。常用地域对应的地址如下:
    • cn-beijing:thrift://lakeformation.las.cn-beijing.ivolces.com:48869
    • cn-shanghai:thrift://lakeformation.las.cn-shanghai.ivolces.com:48869
    • cn-guangzhou:thrift://lakeformation.las.cn-guangzhou.ivolces.com:48869
    • ap-southeast-1:thrift://lakeformation.las.ap-southeast-1.ivolces.com:48869

使用 Iceberg Catalog

假设您已经创建了一个名为 iceberg_s3 的外部 Catalog。

查看 Iceberg Catalog

查看所有 Catalog,将列出所有已创建的外部 Catalog。

SHOW EXTERNAL CATALOGS;

查看某个 Catalog 的 Schema 信息。

SHOW CREATE EXTERNAL CATALOG catalog_name;

查询 Iceberg Catalog 中的表

用户可以通过 catalog_name.db_name.table_name 这种三段式命名方式直接访问 Iceberg Catalog 中的表,例如

SELECT * FROM iceberg_s3.iceberg_db_name.iceberg_table_name;

ByteHouse 原生的 CnchMergeTree 表也可以用如下 SQL 访问。其中,cnch(cloud-native-clickhouse 的缩写)被用作了 Bytehouse CDW 默认 Catalog 的名字。

SELECT * FROM cnch.cnch_db_name.cnch_db_name;
-- 等同于 SELECT * FROM cnch_db_name.cnch_db_name; 

跨 Catalog 查询

利用外部 Catalog,您可以直接将 Iceberg 外表和 ByteHouse 的 CnchMergeTree 表做 join。

SELECT * FROM iceberg_s3.iceberg_db.iceberg_table 
UNION ALL 
SELECT (1) FROM cnch.cnch_db.cnch_table;

列出 Iceberg Catalog 中的数据库、表

列出 Iceberg Catalog 中的数据库名。

SHOW DATABASES FROM catalog_name;

列出数据库中的表名。

SHOW TABLES FROM catalog_name.database_name;

获取表的创建语句。

SHOW CREATE TABLE catalog_name.database_name.table_name;

Switch Catalog

您可以使用如下 SQL 来改变默认的 Catalog,执行后,后续查询会默认使用该 Catalog 下的数据库和表:

SWITCH CATALOG catalog_name;

此时再运行查询语句,ByteHouse 会从 Iceberg Catalog 下的指定的数据库、表中读取数据。

SELECT * FROM iceberg_db.iceberg_table;

如果需切换回 ByteHouse 默认的 Catalog,您可以使用以下任意一条命令:

# 方式 1
SWITCH CATALOG default;

# 方式 2
SWITCH CATALOG cnch;

您也可以使用以下命令,直接将默认的数据库切换到 Iceberg Catalog 下的指定数据库:

USE iceberg_s3.iceberg_db;

如需切换回 ByteHouse 内表,可使用以下命令:

USE cnch.cnch_database_name;

查询当前使用的 Catalog

您可通过 currentCatalog() 函数查询当前 Catalog。

SELECT currentCatalog();

查询 Iceberg Catalog 元信息

您可通过以下语句查询 Iceberg Catalog 中的数据库、表、分区的元信息,包括数据库名称、存储路径、属性等信息。

  • 查询 Iceberg Catalog 中数据库表的元信息

    SELECT * FROM catalog_name.database_name.table_name$metadata$properties
    
  • 查询 Iceberg Catalog 中数据表的分区的元信息

    SELECT * FROM {catalog_name.}database_name.table_name$metadata$partitions
    

删除 Iceberg Catalog

您可以使用如下命令删除 Iceberg Catalog。

DROP EXTERNAL CATALOG [IF EXISTS] catalog_name;

相关文档

通过 ByteHouse 云数仓版控制台使用 Iceberg Catalog

ByteHouse 云数仓版也支持通过 ByteHouse 云数仓版控制台创建和使用 Iceberg Catalog,详情请参见管理外部 Catalog

使用 Iceberg 外表

除了通过 Iceberg Catalog 访问 Iceberg 数据外,ByteHouse 也支持通过外表方式查询、写入 Iceberg 数据,详情请参见 Iceberg 外表

最近更新时间:2026.01.08 15:44:03
这个页面对您有帮助吗?
有用
有用
无用
无用