本文向您介紹在Flink CDC資料攝入作業中編寫訊息路由(Route)規則的文法。您可以在Flink CDC資料攝入作業的route模組中定義多條路由規則,指定上遊表到下遊表的映射關係。
Route規則參數
參數 | 含義 | 是否必填 | 備忘 |
| 指定生效上遊表。 | 是 | 支援使用Regex。 |
| 指定資料路由的目標位置。 | 是 | 無。 |
| 在使用模式比對功能時,用於指代上遊表名的字串。 | 否 | 例如,當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-tableRegex中使用圓括弧建立擷取的群組,並在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下遊表中。