数据过滤任务
简介
在实际业务中,用户可能只希望同步部分数据,例如最近几天的更新、某些状态为特定值的记录等。
CloudCanal 支持两种数据过滤方式:
- 程序内过滤(默认):所有数据从源端读取后在 CloudCanal 内部执行过滤逻辑。
- 过滤条件下推(可选):将
WHERE
条件拼接进源端 SQL,由数据库自行完成过滤。
以下将以 MySQL 到 MySQL 为例,介绍如何创建带过滤条件的同步任务。
过滤方式说明
程序内过滤(默认)
CloudCanal 从源端全量读取数据后,在内置 SQL 引擎中执行过滤表达式。该模式兼容性强,适用于所有支持的数据源。
- 优点:
- 支持所有类型的数据源。
- 支持断点续传。
- 支持增量同步与全量迁移。
- 限制:
- 需要全表读取,源端压力较大。
- 表达式支持有限(不支持子查询、JOIN 等)。
过滤条件下推(可选)
启用该功能后,CloudCanal 会将填写的 WHERE
条件拼接至 SQL 查询中,由源端数据库直接执行过滤,减少无效数据读取。
- 优点:
- 性能更优,源端负载更小。
- 支持数据库自身更复杂的 SQL 表达式。
- 限制:
- 仅适用于全量迁移和数据校验阶段。
- 不支持断点续传,任务中断后将重做。
- 各数据库语法差异大,需按方言调整表达式。
操作步骤
登录 CloudCanal。点击 同步任务 > 创建任务。
选择源端和目标端数据源。
点击 下一步,进入 功能配置 页面,配置任务类型。
默认采用 程序内过滤,如需启用 过滤条件下推,需将任务类型设置为 全量迁移,取消勾选 增量同步,并启用页面底部的 过滤条件下推。信息过滤条件下推仅对 全量迁移 和 数据校验 阶段生效。设置的过滤条件将自动拼接至系统生成的 SQL 语句中,用于筛选符合条件的数据。
点击 下一步,进入 表与操作过滤 页面,勾选需同步的表。
点击 下一步,进入 数据处理 页面,设置具体的过滤条件:
- 在左侧选择目标表,点击 操作 > 数据过滤条件。如果需要设置多张表,则可点击 批量操作 > 数据过滤条件。
- 选择过滤模式:
- 程序内过滤
- 高级模式(推荐):使用标准 SQL 引擎技术,比较全面支持了以 MySQL 语法为基础的 SQL 表达式。
- 普通模式:为简易 SQL 表达式,功能相对较弱,也是早期产品使用的数据过滤技术,将来逐步淘汰。
- 过滤条件下推
直接将表达式拼接至源端 SQL 的WHERE
句子中,由数据库执行筛选逻辑,提升性能、减少无效数据传输。
- 填写
WHERE
条件(不包含WHERE
关键字)。
示例:gmt_create >= DATE_SUB(NOW(), INTERVAL 65 MINUTE)
在 创建确认 页面,点击 创建任务,完成配置。
表达式示例
以下是不同数据库的时间范围过滤表达式示例:
源端数据源 | 过滤表达式示例 |
---|---|
MySQL | gmt_create >= DATE_SUB(NOW(), INTERVAL 65 MINUTE) |
Oracle | gmt_create >= CURRENT_TIMESTAMP - INTERVAL '65' MINUTE |
PostgreSQL | gmt_create >= NOW() - INTERVAL '65 minutes' |
SQL Server | gmt_create >= DATEADD(MINUTE, -65, GETDATE()) |
PolarDB MySQL | gmt_create >= NOW() - INTERVAL 65 MINUTE |
PolarDB-X | gmt_create >= NOW() - INTERVAL 65 MINUTE |
OceanBase(MySQL) | gmt_create >= NOW() - INTERVAL 65 MINUTE |
ObForOracle | gmt_create >= CURRENT_TIMESTAMP - INTERVAL '65' MINUTE |
Greenplum | gmt_create >= NOW() - INTERVAL '65 minutes' |
StarRocks | gmt_create >= NOW() - INTERVAL 65 MINUTE |
常见问题
两种过滤方式如何选择?
若追求兼容性、支持增量同步,可使用默认的 程序内过滤。
若希望提升性能、只做全量数据迁移,可启用 过滤条件下推 功能。
能否同时使用两种方式?
不能。启用 过滤条件下推 后,程序只依赖源端过滤,不再在 CloudCanal 内部执行过滤。
是否支持复杂 SQL 表达式?
程序内过滤 支持基本 MySQL 表达式,暂不支持 JOIN、子查询。
下推过滤 可支持更复杂的表达式,依赖数据库能力。