当需要将已有 OLTP 数据库实例中的多个表进行读合并时,可基于 Merge 表引擎合并,将多个表数据实时汇聚到一个 LibraSQL 分析引擎进行分析。
例如:在游戏行业中,各个游戏服采用分库的架构时,各个库中就会有相同的用户表,日志表,道具表等。通过使用 TDSQL-H LibraDB,将数据多源合一到 LibraSQL 分析引擎,既能为各个游戏服产出报表,也能以全局视角聚合分析所有数据或完成全局的审计需要。
使用限制
添加 CDC 任务通用使用限制、源数据库环境要求请参见 添加 CDC。
需保证合并至同一张表的源端表结构相同。
注意事项
前提条件
操作步骤
1. 在设置对象页面,同步对象选择指定对象。
2. 多表归并开关默认关闭。
3. 在源库对象中选择库表。
4. 单击![](https://qcloudimg.tencent-cloud.cn/image/document/cfbab1fe124531663104dade4ede1e82.png)
,已选对象中将展示已选择的库表。
![](https://qcloudimg.tencent-cloud.cn/image/document/cfbab1fe124531663104dade4ede1e82.png)
5. 使用 Merge 表引擎合并,支持以下两种方式。
说明
同库多源合一
5.1 (可选)在已选对象右侧单击批量改名,在弹出的批量添加已选对象表名后缀对话框中输入后缀,单击确定。
5.2 单击下一步,进入 添加 CDC 任务 的高级设置步骤,继续执行其他步骤,启动 CDC 任务后,该配置生效。
5.3 使用 Merge 表引擎,匹配具有相同命名模式和表结构的数据表,构造虚拟表,完成表数据查询合并。
CREATE TABLE ... Engine=Merge(currentDatabase(), tables_regexp)
其中,tables_regexp 是一个正则表达式,用于匹配指定数据库中的表名。n示例:
-- 在当前数据库下,按照普通表 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;
跨库多源合一
5.1 (可选)修改库表名映射或批量为表添加后缀请参考 修改库表名映射。
5.2 单击下一步,进入 添加 CDC 任务 的高级设置步骤,继续执行其他步骤,启动 CDC 任务后,该配置生效。
5.3 使用 Merge 表引擎,匹配具有相同命名模式的库,且库中有相同命名模式和表结构的数据表,构造虚拟表,完成表数据查询合并。
CREATE TABLE ... Engine=Merge(REGEXP(expression), tables_regexp)
其中,expression 是用于匹配数据库名称的正则表达式。tables_regexp 是一个正则表达式,用于匹配指定数据库中的表名。n示例:
-- 按照普通表 table_1 的表结构建立 Merge 表 table_all,其中 table_all 是虚拟表,A_* 匹配数据库名称的正则表达式,table_1 匹配数据库中表名的正则表达式CREATE TABLE table_all on cluster default_cluster as A_1.table_1 ENGINE=Merge(REGEXP('A_*'), 'table_1');-- 当查询 Merge 表时,LibraSQL 分析引擎会自动查询所有 A_* 数据库(例如 A_1、A_2)中命名为 table_1 的表,将结果汇聚返回select * from table_all;