基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
obcdc 支持增量旁路导入
更新时间:2024-11-26 23:00:00
背景信息
OceanBase 数据库在 V4.3.0 支持了全量旁路导入,但是这种方式在导入效率上不是最优的,所以 OceanBase 数据库在 V4.3.1 推出了增量旁路导入功能。简单来说,增量旁路导入是一种 Replace 的语义,即不检查主键冲突,对于包含重复主键的行直接替换,详细介绍可参见 旁路导入概述。obcdc 需要适配增量旁路导入的语义,将导入的数据输出给下游。
注意
obcdc 暂不支持同步全量旁路导入的数据,仅支持同步增量旁路导入的数据。
使用限制
obcdc 暂不支持同步行外存储的 lob 数据。
前提条件
已部署 V4.3.1 或之后版本的 obcdc。
已部署 OceanBase 数据库,且 OceanBase 数据库为 V4.3.1 或之后版本。
操作步骤
假设 OceanBase 集群中存在表 A 和表 B 两张表,其中,表 A 中的数据如下,col1 列为主键:
+------+------+
| col1 | col2 |
+------+------+
| 1 | 11 |
| 2 | 22 |
+------+------+
表 B 中的数据如下,col1 列为主键:
+------+------+
| col1 | col2 |
+------+------+
| 1 | 21 |
| 3 | 33 |
+------+------+
此处以将表 B 的数据增量旁路导入到表 A 中为例,介绍 obcdc 侧的操作。
修改配置文件
在配置文件中配置
enable_direct_load_inc为1,表示开启同步增量旁路导入,配置文件中配置项的详细介绍可参见 obcdc 配置项说明。enable_direct_load_inc=1使配置生效
enable_direct_load_inc为重启生效的配置项,根据使用 obcdc 的方法不同,使其生效方式有如下两种。将 obcdc 接入自己的数据消费链路进行使用时,可重新编译运行所写代码,相关操作可参见 obcdc 开发说明。
通过 obcdc_tailf 使用 obcdc 功能时,可重新执行 obcdc_tailf 命令,示例如下:
[admin@test oceanbase]$ ./bin/obcdc_tailf -f libobcdc.conf -D output.txt此处以配置文件相对路径为
libobcdc.conf,将输出数据保存到output.txt文件为例,需根据实际情况替换配置文件和输出数据文件。obcdc_tailf 命令的详细介绍可参见 obcdc_tailf。
登录 OceanBase 数据库,执行增量旁路导入
obclient [test]> insert /*+ enable_parallel_dml parallel(2) direct(true, 0, 'inc_replace') */ into A select * from B;命令的详细介绍可参见 使用 INSERT INTO SELECT 语句旁路导入数据。
查看执行结果
obclient [test]> SELECT * FROM A;输出如下,表
B的数据已经被导入到表A+------+------+ | col1 | col2 | +------+------+ | 1 | 21 | | 2 | 22 | | 3 | 33 | +------+------+查看 obcdc 的输出
OceanBase 数据库中执行增量旁路导入后,obcdc 会输出的对应信息给下游,简略示例如下:
[EBGIN]; [EPUT] column_name:col1, old_value:1, new_value:1, column_name: col2, new_value: 21; [EPUT] column_name:col1, old_value:3, new_value:3, column_name: col2, new_value: 33; [ECOMMIT];