Iceberg 数据源

最近更新时间:2024-09-04 20:44:31

我的收藏
数据集成提供了 Iceberg 的实时写入能力,本文为您介绍使用 Iceberg 进行实时数据同步的当前能力支持情况。

支持版本

目前数据集成已支持 Iceberg 单表及整库实时写入,使用实时同步能力需遵循以下版本限制:
类型
版本
Iceberg
0.13.1+

使用限制

Upsert 写入只支持 Iceberg V2 表。
Iceberg 写入后,为提高查询性能,一般要求下游通过定时 Spark Action 进行小文件合并,并合理配置 Checkpoint 周期。
Iceberg 列类型变更仅支持将 int 改成 long,float 改为 double,以及 Decimal 类型在相同 Scale 时增加精度。

整库写入配置

支持的数据来源

当前支持将以下来源类型的数据实时整库同步到 Iceberg 目标端:

数据目标设置




参数
说明
数据去向
选择需要同步的目标数据源。
写入模式
Upsert:更新写入。当主键不冲突时,可插入新行;当主键冲突时,则进行更新。适用于目标表有主键且需要根据源端数据实时更新的场景。会有一定的性能损耗 。Upsert 写入模式仅支持 Iceberg V2 表,且必须有唯一键。
Append:追加写入。无论是否有主键,以插入新行的方式追加写入数据,是否存在主键冲突取决于目标端。适用于无主键且允许数据重复的场景。无性能损耗。
全量 Append + 增量 Upsert:根据源端数据同步阶段自动切换数据写入方式,全量阶段采用 Append 写入提高性能,增量阶段采用 Upsert 写入进行数据实时更新
库表匹配策略
Iceberg 中数据库以及数据表对象的名称匹配规则:
默认与来源库/来源表同名。
自定义:支持使用内置参数和字符串组合生成目标库表名称。
说明:
示例:如来源表名称为 table1,映射规则为 ${table_name_di_src}_inlong,则 table1 的数据将被最终映射写入至 table1_inlong 中。
系统将按匹配规则进行目标库/表匹配:
若 Iceberg 目标端不存在匹配到的库/表,则进行自动建库/建表。
若 Iceberg 目标端已存在匹配到的库/表,则不自动建库/建表,默认用已存在的库/表。
高级设置
可根据业务需求配置参数。

单表写入节点配置

1. 在数据集成页面左侧目录栏单击实时同步。
2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。



参数
说明
数据去向
需要写入的 Iceberg 数据源。
支持选择、或者手动输入需写入的库名称。
默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
支持选择、或者手动输入需写入的表名称。
当数据源网络不联通导致无法直接拉取表信息时,可手动输入表名称。在数据集成网络连通的情况下,仍可进行数据同步。
一键建立目标表
来源端为 MySQL、TDSQL-C MySQL、TDSQL MySQL、Oracle、PostgreQL、Oceanbase、达梦时,支持根据源表结构一键创建 Iceberg 目标表。
写入模式
Upsert:更新写入。当主键不冲突时,可插入新行;当主键冲突时,则进行更新。适用于目标表有主键且需要根据源端数据实时更新的场景。会有一定的性能损耗。仅支持 Iceberg V2 表,且必须有唯一键。
Append:追加写入。无论是否有主键,以插入新行的方式追加写入数据,是否存在主键冲突取决于目标端。适用于无主键且允许数据重复的场景。无性能损耗。
唯一键
Upsert 写入模式下,需设置唯一键保证数据有序性,支持多选。
高级设置
可根据业务需求配置参数。

日志采集写入节点配置




参数
说明
数据源
选择当前项目中可用的 Iceberg 数据源。
库/表
选择该数据源中对应的库表。
写入模式
Iceberg 支持两种写入模式:
Append:追加写入。
Upsert:以 Upsert 方式插入消息,设置后消息仅只能被消费端处理一次以保证 Exactly-Once。
唯一键
Upsert 写入模式下,需设置唯一键保证数据有序性,支持多选,Append 模式则不需要设置唯一键。
高级设置(可选)
可根据业务需求配置参数。

写入数据类型转换支持

内部类型
Iceberg 类型
CHAR
STRING
VARCHAR
STRING
STRING
STRING
BOOLEAN
BOOLEAN
BINARY
FIXED(L)
VARBINARY
BINARY
DECIMAL
DECIMAL(P,S)
TINYINT
INT
SMALLINT
INT
INTEGER
INT
BIGINT
LONG
FLOAT
FLOAT
DOUBLE
DOUBLE
DATE
DATE
TIME
TIME
TIMESTAMP
TIMESTAMP
TIMESTAMP_LTZ
TIMESTAMPTZ
INTERVAL
-
ARRAY
LIST
MULTISET
MAP
MAP
MAP
ROW
STRUCT
RAW
-

常见问题

表字段长度过长导致的提交失败问题




解决方案:
1. 先备份 TABLE_PARAMS 表: mysqldump -hxxx -uroot -pxxx hivemetastore TABLE_PARAMS > table_params.sql
2. 长度改为40000: alter table TABLE_PARAMS MODIFY PARAM_VALUE VARCHAR(40000);
说明:
utf-8 格式时无法支持40000长度,可以改为 text 类型或减小到20000。