当需要将已有 OLTP 数据库实例中的多个表进行读合并时,可基于 Merge 表引擎合并,将多个表数据实时汇聚到一个 LibraSQL 分析引擎进行分析。
场景概述
场景 | 说明 |
场景一 | 将多个源 OLTP 实例多个表数据,实时汇集到一个 LibraSQL 分析引擎进行分析。 |
场景二 | 将同一个源 OLTP 实例多个数据库中的多个表数据,实时汇集到一个 LibraSQL 分析引擎进行分析。 |
使用限制
注意事项
场景一
场景示例
多表归并 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示例:databaseA1.6 在已选对象右侧单击批量改名,在弹出的批量添加已选对象表名后缀对话框中输入后缀,单击确定。n示例:
_log
n已选对象中将显示修改后的库表名称。n示例:databaseA:tableA_log 和 tableB_log1.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示例:
_log
n已选对象中将显示修改后的库表名称。n示例:A_1:d_1_log 和 d_2_log,A_2:c_1_log 和 c_2_log1.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),将结果汇聚返回。