操作场景
在配置同步任务时,DTS 支持对单个表或者批量对多个表设置 where 条件过滤,只有满足设置规则的数据才会同步到目标数据库,这样用户可以灵活进行数据拆分。
适用范围
当前支持批量 where 的同步链路:PostgreSQL 相互之间链路。
约束限制
1. 不支持对整库或者整表设置 where 条件,多个表需要设置 where 条件过滤时,请依次勾选多个表对象,然后设置 where 条件规则。
2. 列过滤与 where 条件过滤的交互说明如下:
如果一个表进行了列过滤,用户同时还对该表设置 where 规则,需要用户自行保证输入 where 规则中的列名,包含在待同步的表中,否则 where 规则可以设置成功,但后续任务启动后会报错。
where 条件规则说明
输入的规则必须是一个合法的 BOOL 表达式,并且表达式的规则相对于 PostgreSQL 更为严格,一些在 PostgreSQL 中支持但可能产生 WARNING 的语法(如字符串同数字比较,c1 + c2 < 'abc'),此处不支持。逻辑运算、算术运算、比较运算规则和优先级同 PostgreSQL 一致,支持通过括号改变运算优先级,操作数中有 NULL 时,运算规则也同 PostgreSQL 一致。DTS 系统会对输入的条件过滤规则进行验证, 如果不合法会给出提醒。
基本的运算规则如下:
支持逻辑运算(NOT,AND,OR)。
支持数字类型(有符号/无符号的整型 bigint、smallint、integer,浮点类型 real 和 double precision,精确类型 numeric)及其算术运算(+、-、*、/、%)和比较运算(=、!=、>、<、>=、<=、<>)。
支持字符串类型(text,character varying,varchar)及其比较运算(二进制比较)。
支持日期类型(date,time with time zone,time without time zone,timestamp without time zone,timestamp with time zone,interval)及其比较运算。
支持日期/时间类型变量同字符串比较,此时字符串被转换为日期/时间类型常量,按照日期/时间比较规则进行。
date 类型: 字符串被转换为日期类型常量,按照日期比较规则进行,忽略时区无关。
time without time zone: 转为时间类型常量与数据库表存储值常量,按照时间比较规则进行;time with time zone: 输入条件需含有时区(如 x > '12:34:56 + 02')。如输入条件没有时区(如 x > '12:34:56' )则根据输入时区,默认使用 UTC + 0 时区时间。
timestamp without time zone: 转为日期/时间类型常量与数据库表存储值常量,按照日期/时间比较规则进行。
timestamp with time zone: 输入条件需含有时区(如 x > '2024-12-26 14:00:00 + 02'),如条件没有时区(如 x > '2024-12-26 14:00:00' ),则默认使用 UTC + 0 时区时间。
interval: 时间间隔类型与时区无关。输入需做类型转换,可以精度到微秒(如 x > '1 year 2 mons 3 days 04:05:06.123456'::interval )。
操作步骤
1. 在 同步任务 的设置同步选项和同步对象页面中,勾选同步对象。
说明:
依次勾选单个表,才能支持在后续步骤设置 where 条件;勾选整库/整表,不能设置 where 条件。

2. 设置数据加工规则,开启 where 条件过滤。
2.1 选择对象。
从前一步骤选择的同步对象范围中,再勾选需要设置 where 条件的对象范围。

2.2 设置过滤条件并确认。
UPDATE 数据条件:可选择“更新前、后数据均满足”、“更新前满足”、“更新后满足”。

3. 确认过滤规则,无误后单击保存并下一步进行后续同步任务流程。
