📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。此页面由 AI 自动翻译,英文原文请见此处。

Apache Iceberg™ Tables



TiDB Cloud Lake 可以连接到 Apache Iceberg™ catalog,这样你无需将数据加载到 Fuse 表中即可查询 Iceberg 表。当所连接的 catalog 支持写操作时,你还可以创建并写入 Iceberg 表。

何时使用 Iceberg

在以下情况下使用 Iceberg:

  • 你的数据已经由 Iceberg catalog 管理。
  • 多个查询引擎需要共享相同的表元信息和对象存储。
  • 你需要 Iceberg 提供的能力,例如 schema evolution 和快照。
  • 你希望从 TiDB Cloud Lake 查询或写入 Iceberg 表。

创建 Iceberg Catalog

在访问 Iceberg 数据库和表之前,请先创建 catalog。

语法

CREATE CATALOG <catalog_name> TYPE = ICEBERG CONNECTION = ( TYPE = '<catalog_type>' [ ADDRESS = '<catalog_address>' ] [ WAREHOUSE = '<warehouse_location>' ] [ "<connection_parameter>" = '<connection_parameter_value>' ] ... );

参数

参数必填?说明
<catalog_name>是TiDB Cloud Lake 中的 catalog 名称。
TYPE是Catalog 引擎。将该值设置为 ICEBERG。
CONNECTION是Iceberg catalog 及其存储的连接属性。
TYPE inside CONNECTION是Iceberg catalog 类型:rest、glue、storage 或 hive。
ADDRESS取决于 catalog 类型Catalog 服务端点或 Hive Metastore 地址。
WAREHOUSE取决于 catalog 类型Catalog 使用的计算集群位置。
<connection_parameter>取决于 catalog 类型Catalog、认证和对象存储属性。

以下连接参数可用于兼容 S3 的存储:

连接参数说明
s3.endpoint兼容 S3 的服务端点。
s3.access-key-idS3 access key ID。
s3.secret-access-keyS3 secret access key。
s3.session-token与临时凭证一起使用的 session token。
s3.regionS3 Region。
client.region客户端使用的 Region。该值优先于 s3.region。
s3.path-style-access是否使用 path-style 的 S3 访问方式。
s3.sse.type服务端加密类型。
s3.sse.keyKMS key ID 或客户提供的加密密钥。
s3.sse.md5客户提供的加密密钥的 MD5 校验和。
client.assume-role.arn要承担的 IAM role 的 ARN。
client.assume-role.external-id承担 IAM role 时使用的 external ID。
client.assume-role.session-name承担 IAM role 时使用的 session 名称。
s3.allow-anonymous是否允许对公共存储进行匿名访问。
s3.disable-ec2-metadata是否禁用来自 EC2 实例元信息的凭证。
s3.disable-config-load是否禁用来自本地配置源的凭证和设置。

支持的 Catalog 类型

TiDB Cloud Lake 支持以下 Iceberg catalog 类型:

Catalog 类型TYPE 值连接要求
RESTrestREST catalog 地址、计算集群位置以及存储属性。
AWS GlueglueGlue Region 和身份验证属性,以及 S3 存储属性。
Storage (Amazon S3 Tables)storage表存储桶 ARN 和 AWS 客户端身份验证属性。
Hive MetastorehiveHive Metastore 地址、计算集群位置以及存储属性。

Storage catalog 支持以下 AWS 客户端属性:

连接参数说明
table_bucket_arnAmazon S3 Tables 表存储桶的 ARN。
profile_nameAWS profile 名称。
region_nameAWS Region。
aws_access_key_idAWS access key ID。
aws_secret_access_keyAWS secret access key。
aws_session_token与临时凭证一起使用的 AWS session token。

管理和查询 Iceberg Catalog

使用以下语句查看和选择 catalog:

SHOW CREATE CATALOG <catalog_name>;
SHOW CATALOGS [ LIKE '<pattern>' | WHERE <expression> ];
USE CATALOG <catalog_name>;

更多信息,请参见 SHOW CREATE CATALOG 和 SHOW CATALOGS。

选择 catalog 后,使用标准 SQL 查询其中的表:

SELECT <select_list> FROM [ <catalog_name>. ]<database_name>.<table_name> [ WHERE <condition> ];

数据类型映射

下表展示了从 Iceberg 类型到 TiDB Cloud Lake 类型的支持映射。此处未列出的 Iceberg 类型不受支持。

Apache Iceberg™TiDB Cloud Lake
BOOLEANBOOLEAN
INTINT32
LONGINT64
DATEDATE
TIMESTAMP / TIMESTAMPZTIMESTAMP
FLOATFLOAT
DOUBLEDOUBLE
STRING / BINARYSTRING
DECIMALDECIMAL
LISTARRAY
MAPMAP
STRUCTTUPLE

刷新缓存的元信息

TiDB Cloud Lake 在首次查询后会缓存 Iceberg catalog 的元信息。默认情况下,元信息缓存有效期为 10 分钟,并会异步刷新。

当你需要立即刷新缓存的元信息时,请使用以下语句:

USE CATALOG <catalog_name>; ALTER DATABASE <database_name> REFRESH CACHE; ALTER TABLE <database_name>.<table_name> REFRESH CACHE;

TiDB Cloud Lake 还支持缓存从 Iceberg catalog 读取的表数据。

写入 Iceberg 表

你可以在支持写操作的 catalog 中创建并写入 Iceberg 表。

创建表

CREATE TABLE [ <database_name>. ]<table_name> ( <column_name> <data_type> [ , ... ] ) ENGINE = ICEBERG [ PARTITION BY ( <column_name> [ , ... ] ) ];
参数说明
ENGINE = ICEBERG以 Iceberg 格式存储该表。
PARTITION BY定义一个或多个分区列。

写入 Iceberg 表时支持以下 TiDB Cloud Lake 数据类型:

TiDB Cloud Lake 类型Apache Iceberg™ 类型
BOOLEANBoolean
INTInt
BIGINTLong
FLOATFloat
DOUBLEDouble
STRINGString
DATEDate
TIMESTAMPTimestamp

插入数据

使用 INSERT INTO 将行写入 Iceberg 表:

INSERT INTO [ <database_name>. ]<table_name> [ ( <column_name> [ , ... ] ) ] VALUES ( <value> [ , ... ] ) [ , ... ];

分区和非分区 Iceberg 表都支持单行和多行插入。对于分区表,TiDB Cloud Lake 会将行路由到相应的分区。

Iceberg 表函数

使用以下表函数检查 Iceberg 元信息:

文档内容是否有帮助?