原生表(TC-Iceberg)操作配置

最近更新时间:2025-03-07 15:07:52

我的收藏

概述

用户在使用 DLC 原生表(TC-Iceberg)时,配置和使用的流程和 Iceberg 原生表一致,如下所示:

步骤托管存储配置请参见 原生表(Iceberg)操作配置
用户可通过 DLC 数据管理界面或者数据探索界面来使用 TC-Iceberg 表。

创建 DLC 原生表(TC-Iceberg)

说明:
创建 TC-Iceberg 表需要使用标准引擎 Standard-S 1.1 及以上版本。建表需指定主键,主键可以是一个或多个字段。
创建原生表有两种方式:
1. 通过 DLC 数据管理界面可视化建表, 建表时选择表类型为 TC-Iceberg 类型,并且为表配置优化引擎。

2. 创建表时的配置项大部分和 Iceberg 表保持一致,具体操作请参见 数据管理。此外,TC-Iceberg 表还新增了流式数据保存周期这一项设置,用于对 TC-Iceberg 表的流式数据进行生命周期的管理,默认保留 7 天。

建表配置项说明:
写入优化:开启写入优化后,用户可以自定义配置文件合并文件清理相关的配置项。
文件合并:开启文件合并后,会在用户配置的引擎上拉起一个优化器任务,对表进行文件合并等优化操作,自动对表进行优化治理。用户可以自定义配置最小文件个数和目标文件大小,最小文件个数表示触发文件合并任务时的小文件个数阈值,目标文件大小表示合并后的文件的最大限制。
文件清理:开启文件清理后,用户可以根据需要配置表的快照过期时间、保留过期快照个数等快照过期策略。
生命周期:该选项主要用来支持用户的数据过期配置,过期策略取决于用户配置的过期时间、过期字段和过期字段格式,由于会删除掉过期数据,配置该项时需谨慎。
流式数据生命周期:TC-Iceberg 表的底层由 change 表和 base 表共同组成,其中 change 表保存的是实时的流式数据,通过配置流式数据生命周期,可以设置change 表中流式数据的保存时长,建议保持默认值:7天。
3. 通过 SQL 建表。
SQL 建表时用户自己编写 CREATE TABLE SQL 语句进行创建,为了声明创建的是 TC-Iceberg 表,需要使用关键字 USING TC_ICEBERG (可忽略大小写)建表指定表格式为 TC-Iceberg 类型,TC-Iceberg 表的数据类型兼容 Iceberg 数据类型。如果主键配置为多个字段,字段间使用逗号隔开。
根据使用场景用户可自行补充一些高级参数,参数通过 TBLPROPERTIES 的方式带入。如果您在创建表的时候没有参数,或者要修改某些属性值,可通过 alter table set tblproperties 的方式进行修改,执行 alter table 修改之后,重启上游的导入任务即可完成属性值修改或者增加。
CREATE TABLE IF NOT EXISTS database_name.table_name (
col1 STRING,
col2 INT,
PRIMARY KEY (col1))
USING TC_ICEBERG PARTITIONED BY (col2)
TBLPROPERTIES ('properties1' = 'value1','properties2' = 'value2');

CREATE TABLE IF NOT EXISTS database_name.table_name (
col1 STRING,
col2 INT,
PRIMARY KEY (col1,col2))
USING TC_ICEBERG PARTITIONED BY (col2)
TBLPROPERTIES ('properties1' = 'value1','properties2' = 'value2');
具体建表属性可参考 原生表(TC- Iceberg)格式说明

更改 DLC 原生表(TC-Iceberg)

如果需要对TC-Iceberg做一些更改,例如增删表属性、修改表的描述、增删表字段等操作,同样可以通过DLC数据管理界面和数据探索界面来操作。
1. 数据管理界面更改表属性。
1.1 增删表字段。

1.2 修改表描述。

1.3 属性增删。

2. SQL 更改表属性。
如果用户在创建表的时候没有携带相关属性值,可通过 alter table 将相关属性值进行修改、添加和移除,如下所示。如涉及到表属性值的变更都可以通过改方式。如果用户表已经有 inlong/oceans/flink 实时导入,修改后需要重启上游导入业务。
ALTER TABLE db_name.tb_name ADD COLUMNS(col3 int);
ALTER TABLE db_name.tb_name DROP COLUMN col1,col2;

ALTER TABLE db_name.tb_name SET TBLPROPERTIES ('pro1' = 'value1', 'pro2' = 'value2');
ALTER TABLE db_name.tb_name UNSET TBLPROPERTIES ('pro1','pro2');

ALTER TABLE db_name.tb_name SET TBLPROPERTIES ('comment' = 'comment_value');

查询数据优化任务

1. 表的优化任务可以在数据优化界面查看,可查看进行中的优化任务和本日优化任务列表。

2. 单击任务中的查看详情,可以看到优化任务的基本信息以及优化内容、优化结果。




查询 DLC 原生表(TC-Iceberg)

DLC 原生表(TC-Iceberg)提供通过 Merge-On-Read 方式,读时合并 ChangeStore 与 BaseStore 中的数据,为近实时湖仓场景提供低延时的数据分析能力。
用户也可直接像使用原生表(Iceberg)一样,直接查询 TC-Iceberg 中的 BaseStore,以提供更多的 Iceberg 兼容使用方式,满足传统使用场景。在增量写入的场景下,BaseStore 的数据时效性依赖于 Auto Compaction 的执行,一般相比读时合并的延时在 5-10 分钟左右。
说明:
目前 Beta 版本仅支持标准引擎 Standard-S 1.1 及以上版本对 DLC 原生表(TC-Iceberg)进行读时合并查询(Merge-On-Read)。

使用 Flink 的流模式进行查询

Streaming 模式读取增量数据

使用 CDC(Change Data Capture)将数据入湖后,您可以使用 Flink 引擎在同一任务中读取增量数据,而无需重新启动任务,并确保数据读取的一致性。通过保存Flink状态中的文件偏移量信息,任务可以继续从上次读取的偏移位置读取数据,确保数据一致性,并能够处理流式增量数据。查询前需要先设置execution.runtime-mode 和 table.dynamic-table-options.enabled 配置项, 并且在 select 查询时带上 OPTIONS('streaming'='true', 'scan.startup.mode'='earliest')。
-- Run Flink tasks in streaming mode in the current session
SET execution.runtime-mode = streaming;

-- Enable dynamic table parameter configuration to make hint options configured in Flink SQL effective
SET table.dynamic-table-options.enabled = true;

-- Incremental unified reading of BaseStore and ChangeStore
SELECT * FROM keyed OPTIONS('streaming'='true', 'scan.startup.mode'='earliest');
配置项 scan.startup.mode 有效值为 earliest 和 latest ,earliest 表示读取整个表的数据,并在 streaming=true 时继续读取增量数据;latest 只读取当前快照之后的数据,不包括当前快照中的数据。

使用 DLC Spark 进行查询

使用 DLC Spark 标准引擎 Standard-S 1.1 及以上版本对 TC-Iceberg 表进行合并查询(Merge-On-Read)时,直接按表名称查询即可:
SELECT * FROM db_name.tb_name;
您也可以通过在查询语句的表名后加上.base的方式来仅查询 BaseStore 的数据。
SELECT * FROM db_name.tb_name.base;

使用更多引擎查询数据

DLC Presto 引擎查询

DLC presto 引擎可查询原生表(TC-Iceberg),将直接查询 BaseStore 中的数据。
SELECT * FROM db_name.tb_name;

使用 EMR Starrocks 查询

使用 EMR Starrocks 引擎查询原生表(TC-Iceberg),与原生表(Iceberg)使用操作一致,将直接查询 BaseStore 中的数据。详请参考StarRocks 直接查询 DLC 内部存储
SELECT * FROM db_name.tb_name;

使用 TCHouse-D 查询

使用 TCHouse-D 引擎查询原生表(TC-Iceberg),与原生表(Iceberg)使用操作一致,将直接查询 BaseStore 中的数据。详请参考查询加速腾讯云 DLC
SELECT * FROM db_name.tb_name;