DataSail 实时/离线整库同步、实时分库分表同步解决方案,支持添加自定义 SQL 转换规则。它支持将源端采集的数据,对其进行各种数据转换操作,以满足各类业务场景需求。
说明
目前转换规则功能属于 BETA 公测阶段,在函数支持度、边界条件处理等细节方面仍在飞速演进。欢迎试用并提出建议。
目前兼容 Flink 1.11 的常用函数(详见数据转换函数库)及其输入输出行为,并持续引入高版本 Flink 函数、拓展函数(例如 JSON 函数、AES 加解密函数)来进一步拓展处理能力。
数据转换可以应用于各种轻量级数据处理场景,例如:
您可以通过以下方式进入数据转换配置:
目前离线整库同步、实时整库同步、实时分库分表同步三种解决方案支持数据转换规则的配置。
基本配置操作详见各解决方案操作详情。
对于整库同步(包含离线整库同步、实时整库同步)解决方案,您可在映射配置 > 数据转换配置栏目中,单击配置详情,在语句输入框中,输入对已选表的 SQL 转换语句,其中 FROM 后的源表名支持正则形式,且库表分隔符(.)无需转义,示例如下:
语句输入框右侧,您可进行以下操作:
SQL 规则与数据库表的关系如下:
注意
SELECT *
语法,例如可以通过 SELECT *, 'Hello' AS new_field
为每个选中的表统一添加一个名为 new_field 的新字段,每个表的 Schema(字段名和类型)可以不同。db_name.table_prefix.*
而非 db_name\.table_prefix.*
或 db_name.table_prefix\.*
),但每个表仅能被一条规则所匹配,否则会报错,报错信息示例如下:FROM db_name.schema_name.table_prefix.*
。WHERE name = FROM_BASE64('5ZOI5ZOI')
而非 WHERE name = '哈哈'
。CAST(123.456 AS DOUBLE)
。转换语句配置完成后,可以在下方目标库表映射配置 栏目,配置完库/表名映射配置后,单击刷新源表和目标表映射按钮。如果语法正确,则会展示出变换后的新表的结构信息。
分库分表模式下,转换规则的配置方法与整库同步方案类似,主要区别如下:
注意
分库分表注意事项
FROM .*..*
或者对于 PostgreSQL 等三级结构数据源的,需写FROM .*..*..*
_src_meta_info_
字段(即使 SELECT *
时也需要显式加入该字段,例如 SELECT *, _src_meta_info_
),否则会报错(如下图)。该字段用于标识该条数据是从哪个实际上游表输入的,也可避免多个分表的数据出现重复 id 导致的写入出错等问题。我们在 SELECT 语句中,可以引用一些数据字段,例如:
SELECT __database_name__ AS dbName, __schema_name__ AS schemaName, __table_name__ AS tableName, __op_type__ AS opType, __ts_ms__ AS transMs FROM my_database..*
注意
CONCAT(__table_name__ , '-SUFFIX')
、__ts_ms__ + 100
是非法的。AS
使用(例如 __table_name__ AS tbl
,不允许直接将原始字段名映射到下游表。说明
下表中映射关系说明:
结构分类 | __database_name__ | __schema_name__ | __table_name__ | |
---|---|---|---|---|
三级结构 | PostgreSQL | Database | Schema | Table |
GaussDB | Database | Schema | Table | |
SQL Server | Database | Schema | Table | |
普通二级结构 | MySQL | Database | -(输出 null,下同) | Table |
MongoDB | Database | - | Table | |
veDB | Database | - | Table |
注意
分库分表模式下,全量阶段的库表元数据字段统一返回 "*",请从 _src_meta_info_
字段读取源表信息。
__op_type__
:__ts_ms__
:
job.transform.ts_ms_field_value_for_batch
高级参数修改批作业的该字段默认值。
job.transform.ts_ms_field_policy_for_batch
高级参数的值为 EPOCH_TIME
,则该字段返回每条数据的实际读取时刻(动态变化)。_src_meta_info_
: