Flink CDC Connectors 核心概念:数据转换(Transform)详解
flink-cdc 项目地址: https://gitcode.com/gh_mirrors/fl/flink-cdc
什么是数据转换(Transform)
在Flink CDC Connectors中,Transform模块是一个强大的数据处理工具,它允许用户在数据同步过程中对数据进行灵活的处理和转换。简单来说,Transform就像是一个数据加工厂,可以对数据进行筛选、投影、计算等操作,然后再将处理后的数据输出到目标系统。
Transform的核心功能
Transform模块主要提供三大核心功能:
- 数据投影(Projection):类似于SQL中的SELECT子句,可以选择保留哪些字段,也可以对字段进行重命名或计算
- 数据过滤(Filter):类似于SQL中的WHERE子句,可以根据条件筛选需要的数据
- 元数据处理:可以访问和处理数据中的元信息,如表名、操作类型等
Transform参数详解
Transform功能通过一系列参数进行配置,下面我们详细解析这些参数:
| 参数名称 | 是否必填 | 功能描述 | 示例 | |---------|---------|---------|------| | source-table | 必填 | 指定要处理的源表,支持正则表达式 | .*\.customer
| | projection | 可选 | 字段投影规则,类似SQL SELECT | id, name AS customer_name
| | filter | 可选 | 数据过滤条件,类似SQL WHERE | age > 18
| | primary-keys | 可选 | 指定目标表的主键 | id,order_no
| | partition-keys | 可选 | 指定目标表的分区键 | dt,region
| | table-options | 可选 | 表创建时的额外配置 | 'connector'='kafka'
| | converter-after-transform | 可选 | 转换后的数据处理 | SOFT_DELETE
| | description | 可选 | 转换规则的描述信息 | "客户数据转换"
|
高级特性:数据转换后处理
converter-after-transform
参数提供了数据转换后的进一步处理能力,目前支持:
- SOFT_DELETE:将删除操作转换为更新操作,实现逻辑删除而非物理删除
transform:
- source-table: \.*.\.*
projection: \*, __data_event_type__ AS op_type
converter-after-transform: SOFT_DELETE
这个配置会将删除操作转换为插入操作,并添加一个op_type
字段标记操作类型,非常适合需要保留历史数据的场景。
元数据字段的应用
Transform模块提供了丰富的元数据访问能力,这些元数据可以帮助我们更好地理解和处理数据:
| 元数据字段 | 数据类型 | 描述 | |-----------|---------|------| | namespace_name | String | 命名空间名称 | | schema_name | String | 模式名称 | | table_name | String | 表名称 | | data_event_type | String | 数据变更操作类型 |
这些元数据可以像普通字段一样在投影和过滤条件中使用,例如:
transform:
- source-table: testdb.customer
projection: id, name, __table_name__ AS source_table
filter: __data_event_type__ = 'INSERT'
支持的函数库
Transform模块内置了丰富的函数库,支持各种数据操作:
1. 比较函数
支持标准的比较操作,如=
, <>
, >
, >=
, LIKE
, IN
等,用法与SQL相同。
2. 逻辑函数
支持AND
, OR
, NOT
等逻辑运算,可以构建复杂的过滤条件。
3. 数学函数
支持加减乘除、取模等基本运算,以及ABS
, CEIL
, FLOOR
, ROUND
等数学函数。
4. 字符串函数
支持字符串连接(||
)、大小写转换(UPPER
, LOWER
)、子串提取(SUBSTR
)、正则替换(REGEXP_REPLACE
)等操作。
5. 时间函数
支持获取当前时间(CURRENT_TIME
)、当前日期(CURRENT_DATE
)等时间相关函数。
实际应用示例
假设我们需要从MySQL同步客户数据到目标系统,但只需要18岁以上的客户,并且希望添加源表信息,可以这样配置:
transform:
- source-table: testdb.customer
projection: id, name, age, __schema_name__ || '.' || __table_name__ AS source_table
filter: age > 18
primary-keys: id
这个配置会:
- 只选择id、name、age字段
- 添加一个source_table字段,值为"模式名.表名"
- 只保留age大于18的记录
- 设置id为目标表的主键
总结
Flink CDC Connectors的Transform模块提供了强大的数据处理能力,可以帮助用户在数据同步过程中实现复杂的数据转换需求。通过合理使用投影、过滤、元数据和函数库,可以灵活地处理各种数据同步场景,满足不同的业务需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考