本文向您介绍在Flink CDC数据摄入作业中编写消息路由(Route)规则的语法。您可以在Flink CDC数据摄入作业的route模块中定义多条路由规则,指定上游表到下游表的映射关系。
Route规则参数
参数 | 含义 | 是否必填 | 备注 |
| 指定生效上游表。 | 是 | 支持使用正则表达式。 |
| 指定数据路由的目标位置。 | 是 | 无。 |
| 在使用模式匹配功能时,用于指代上游表名的字符串。 | 否 | 例如,当replace-symbol设置为 |
| 该route模块的描述信息。 | 否 | 无。 |
修改Route模块的语句后,需要进行无状态启动。
使用示例
单表同步至单表
将上游表mysql_db.web_order中的数据路由到下游表sink_db.ods_web_order。
route:
- source-table: mysql_db.web_order
sink-table: sink_db.ods_web_order
description: sync a table to one destination table with given prefix ods_单表同步至多表
将同一张表的数据分发给多个下游表,只需定义多条路由规则即可。例如将mydb.orders的数据会被同时分发到sink_db和backup_sink_db两个数据库中。
route:
- source-table: mydb.orders
sink-table: sink_db.orders
- source-table: mydb.orders
sink-table: backup_sink_db.orders多表同步至多表
可以在一个route块中使用YAML列表符号(-)定义多条规则,它们会同时生效。
route:
- source-table: mydb.orders
sink-table: ods_db.ods_orders
description: sync orders table to ods_orders
- source-table: mydb.shipments
sink-table: ods_db.ods_shipments
description: sync shipments table to ods_shipments
- source-table: mydb.products
sink-table: ods_db.ods_products
description: sync products table to ods_products分库分表同步
将上游source_db数据库中的所有表合并到下游sink_db.merged表中。
route:
- source-table: source_db.\.*
sink-table: sink_db.merged
description: sync sharding tables to one destination table整库同步
将source_db数据库中的全部表一一对应地同步到sink_db中,并保持表名不变。
route:
- source-table: source_db.\.*
sink-table: sink_db.<>
replace-symbol: <>
description: route all tables in source_db to sink_db使用replace-symbol参数定义的<>特殊字符串会被表名替代,从而实现源表到汇表的一一对应。
高级路由规则
Route模块支持完整的正则捕获组替换规则。
您可以在 source-table正则表达式中使用圆括号创建捕获组,并在sink-table中使用$1、$2依次引用捕获的内容。
以下是一些常见的用例及对应的路由规则:
将捕获的全部数据库统一增加前缀,并保持表名不变:
route: - source-table: (\.*).(\.*) sink-table: ods_$1.$2其中,第一个捕获组(
$1)匹配完整的数据库名,第二个捕获组($2)匹配完整的表名。最后,根据库名表名组成完整的下游表ID。将捕获的全部数据库、表统一增加前缀:
route: - source-table: (\.*).(\.*) sink-table: ods_$1.upstream_$2将捕获的全部数据库、表名拼合成下游表的名字,写入同一个数据库:
route: - source-table: db_no_(\.*).table_no_(\.*) sink-table: sink_db.table_$1_$2此规则会从
db_no_100.table_no_300中提取出两个捕获组(100、300),并写入到sink_db.table_100_300下游表中。