Iceberg

最近更新时间:2026-05-06 16:28:12

我的收藏

简介

对于已存储于 对象存储(COS)上的 Iceberg 表,您可以使用 CREATE EXTERNAL TABLE 命令将其元数据信息添加到 TCHouse-X 服务。TCHouse-X 实例即可对该表进行读操作。

前置准备

根据您的数据存储位置,请完成以下相应准备工作:

存储于 COS 上的 Iceberg 表

1. 创建 TCHouse-X 实例,操作指南请参见 实例创建与销毁
2. 准备对象存储资源:
创建存储桶
上传文件
获取文件的 cosn 路径:cosn 路径为 'cosn://' 前缀 + 复制的路径名。

相关工具概览:对象存储 > 工具概览

场景 1:仅创建外表,不导入数据至 TCHouse-X

本场景适用于将已有的 Iceberg 表元数据映射到 TCHouse-X,实现对外表的查询分析。

创建 Iceberg 外表

参考语法如下:
CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name
[COMMENT 'table_comment']
STORED AS ICEBERG
[LOCATION 'table_path']
[TBLPROPERTIES ('key1'='value1', 'key2'='value2', ...)]

场景 2:创建外表,并导入数据至 TCHouse-X 内表

本场景适用于将 Iceberg 外部存储系统中的数据迁移或同步到 TCHouse-X 的内部管理表,以实现数据的高效存储和查询优化。

Step 1:创建 Iceberg 外表

操作详情与“场景 1:仅创建外表,不导入数据至 TCHouse-X”完全相同。

Step 2:创建 TCHouse-X 内表

在执行数据导入之前,您需要创建用于存储数据的 TCHouse-X 内表。内表的 Schema 应与 Iceberg 外表的 Schema 保持一致。

Step 3:写入数据

使用 INSERT INTO...SELECT 语句,将数据从已创建的 Iceberg 外表查询出来,并写入 TCHouse-X 的内表。为了确保数据导入操作的性能和稳定性,强烈推荐使用离线(Batch)引擎执行数据写入任务。
/*+engine=batch*/
insert into inner_item select * from external_item;
说明:
/*+engine=batch*/ 是 TCHouse-X 的优化 Hint,用于调用离线计算引擎,以处理大规模数据的批量导入,推荐在数据迁移和初始化同步时使用。默认资源配置如下:
Executor 节点规格: 2X-Small (4CU)
Executor 节点数量: 1 个
Driver 节点规格: 2X-Small (4CU)
Driver 节点数量: 1 个
如果您需要进一步配置离线计算引擎的资源,可使用 Hint 组合/*+engine=batch, executor_specs=2x-small, executor_count=1, driver_specs=2x-small*/进行配置,其中executor_specsdriver_specs 可选规格有:
2X-Small (4CU)
X-Small (8CU)
Small (16CU)
Medium (32CU)
Large (64CU)
您可以替换 SELECT * 为特定的列名,或添加 WHERE 子句以实现增量或条件导入。

数据类型映射

Iceberg 与 TCHouse-X 数据类型略有差异,其映射关系如下:
Iceberg DATA Type
DATA Type in TCHouse-X
BOOLEAN
BOOLEAN
INT
INTEGER
LONG
BIGINT
FLOAT
FLOAT
DOUBLE
DOUBLE
DECIMAL(P, S)
DECIMAL(P, S)
DATE
DATE
TIME
Not supported
TIMESTAMP
TIMESTAMPNTZ
TIMESTAMPTZ
TIMESTAMPLTZ/TIMESTAMP
STRING
STRING
UUID
Not supported
FIXED(L)
Not supported
BINARY
Not supported
STRUCT
STRUCT (read only)
LIST
ARRAY (read only)
MAP
MAP (read only)