有奖捉虫:行业应用 & 管理与支持文档专题 HOT
文档中心 > 最佳实践 > TDSQL-H LibraDB > 基于 Merge 表引擎数据合并最佳实践
当需要将已有 OLTP 数据库实例中的多个表进行读合并时,可基于 Merge 表引擎合并,将多个表数据实时汇聚到一个 LibraSQL 分析引擎进行分析。

场景概述

场景
说明
场景一
将多个源 OLTP 实例多个表数据,实时汇集到一个 LibraSQL 分析引擎进行分析。
场景二
将同一个源 OLTP 实例多个数据库中的多个表数据,实时汇集到一个 LibraSQL 分析引擎进行分析。

使用限制

请参见 基于 Merge 表引擎数据合并 中的使用限制。

注意事项

添加 CDC 任务通用注意事项请参见 添加 CDC

场景一

场景示例

多表归并 CDC 任务
源端 OLTP 库表名
合并至目标端库表名
任务一
源端 OLTP 1database1:tableA 和 tableB
databaseA:tableA_log 和 tableB_log
任务二
源端 OLTP 2database2:tableC 和 tableD
databaseA:tableC_log 和 tableD_log
?
任务一和任务二均启动后,源端 OLTP 1和源端 OLTP 2中指定的多个库表将会实时同步至目标端指定的库表,再通过 Merge 表引擎,实现数据读取时合并。

操作步骤

以下步骤仅以场景示例为例,其他场景案例请参考该操作步骤执行。
1. 创建 CDC 任务一。
1.1 参考 添加 CDC 任务 并已进入设置指定对象步骤。n示例:源端为:OLTP 1对象选择指定对象
1.2 多表归并开关默认关闭。
1.3 源库对象中选择库表。n示例:database1:tableA 和 tableB
1.4 单击
?
已选对象中将展示已选择的库表。
1.5 将鼠标悬停至目标库,单击
?
修改库名称。n示例:databaseA
1.6 已选对象右侧单击批量改名,在弹出的批量添加已选对象表名后缀对话框中输入后缀,单击确定。n示例:_logn已选对象中将显示修改后的库表名称。n示例:databaseA:tableA_log 和 tableB_log
1.7 单击下一步,进入 添加 CDC 任务 的高级设置步骤,继续执行其他步骤,启动 CDC 任务后,该配置生效。n任务启动后,源端已指定的表会同步至目标端的指定库表中。示例:database1:tableA 和 tableB 数据会分别同步至 databaseA:tableA_log 和 tableB_log 中。
2. 创建 CDC 任务二。n参考创建 CDC 任务一的步骤。n示例:源端为 OLTP 2,在源库对象中选择库表 database2:tableC 和 tableD,合并到目标端的指定库表命名为 databaseA:tableC_log 和 tableD_log。n任务启动后,源端已指定的表会同步至目标端的指定库表中。示例:database2:tableC 和 tableD 数据会分别同步至 databaseA:tableC_log 和 tableD_log 中。
3. 利用 Merge 表能力,匹配具有相同命名模式和表结构的数据表,构造虚拟表,完成表数据查询合并。
CREATE TABLE ... Engine=Merge(currentDatabase(), tables_regexp)
其中,tables_regexp 是一个正则表达式,用于匹配指定数据库中的表名。示例:
-- 在当前数据库下,按照普通表 tableA_log 的表结构建立 Merge 表 table_all,其中 table_all 是虚拟表,.*_log 匹配当前数据库中表名的正则表达式
CREATE TABLE table_all on cluster default_cluster as databaseA.tableA_log Engine=Merge(currentDatabase(), '.*_log') ;
?
-- 当查询 Merge 表时,LibraSQL 分析引擎会自动查询所有带后缀 _log 的表(即 tableA_log、tableB_log、tableC_log、tableD_log),将结果汇聚返回
select * from table_all;

操作结果

源 OLTP 1与源 OLTP 2实现多源合一:在目标端使用 Merge 表引擎查询任务一和任务二中数据时,多个表数据合并返回。
示例:当查询 Merge 表时,LibraSQL 分析引擎会自动查询所有 *_log(即 tableA_log、tableB_log、tableC_log、tableD_log)表,将结果汇聚返回。

场景二

场景示例

多表归并 CDC 任务
源端 OLTP 库表名
合并至目标端库表名
任务一
源端 OLTP 3
?
A_1:d_1 和 d_2
A_2:c_1 和 c_2
A_1:d_1_log 和 d_2_log
A_2:c_1_log 和 c_2_log
?
任务一启动后,源端 OLTP 3中指定的库表会分别实时同步至目标端指定的库表,再通过 Merge 表引擎,实现数据读取时合并。

操作步骤

以下步骤仅以场景示例为例,其他场景案例请参考该操作步骤执行。
1. 创建 CDC 任务一。
1.1 参考 添加 CDC 任务 并已进入设置指定对象步骤。n示例:源端为:OLTP 3
1.2 设置对象页面,同步对象选择指定对象
1.3 多表归并开关默认关闭。
1.4 源库对象中选择库表。n示例:A_1:d_1 和 d_2,A_2:c_1 和 c_2
1.5 单击
?
已选对象中将展示已选择的库表。
1.6 已选对象右侧单击批量改名,在弹出的批量添加已选对象表名后缀对话框中输入后缀,单击确定。n示例:_logn已选对象中将显示修改后的库表名称。n示例:A_1:d_1_log 和 d_2_log,A_2:c_1_log 和 c_2_log
1.7 单击下一步,进入 添加 CDC 任务 的高级设置步骤,继续执行其他步骤,启动 CDC 任务后,该配置生效。n任务启动后,源端已指定的表会同步至目标端的指定库表中。示例:A_1:d_1 和 d_2、A_2:c_1 和 c_2数据会分别同步至 A_1:d_1_log 和 d_2_log、A_2:c_1_log 和 c_2_log 中。
2. 使用 Merge 表引擎,匹配具有相同命名模式的库,且库中有相同命名模式和表结构的数据表,构造虚拟表,完成表数据查询合并。
CREATE TABLE ... Engine=Merge(REGEXP(expression), tables_regexp)
其中,expression 是用于匹配数据库名称的正则表达式。tables_regexp 是一个正则表达式,用于匹配指定数据库中的表名。示例:
-- 按照普通表 d_1_log 的表结构建立 Merge 表 table_all,其中 table_all 是虚拟表,A_* 匹配数据库名称的正则表达式,.*_log 匹配数据库中表名的正则表达式
CREATE TABLE table_all on cluster default_cluster as A_1.d_1_log ENGINE=Merge(REGEXP('A_*'), '.*_log');
?
-- 当查询 Merge 表时,LibraSQL 分析引擎会自动查询所有 A_* 数据库(即 A_1、A_2)中的带后缀 _log 的表(即 d_1_log、d_2_log、c_1_log、c_2_log),将结果汇聚返回
select * from table_all;

操作结果

源 OLTP 3实现同源多表合一:在目标端使用 Merge 表引擎查询任务一中数据时,跨库多个表数据合并返回。
示例:当查询 Merge 表时,LibraSQL 分析引擎会自动查询 A_1、A_2 中的带后缀 _log 的表(即 d_1_log、d_2_log、c_1_log、c_2_log),将结果汇聚返回。


http://www.vxiaotou.com