where 条件过滤

最近更新时间:2025-07-31 16:56:11

我的收藏

操作场景

在配置同步任务时,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 数据条件:可选择“更新前、后数据均满足”、“更新前满足”、“更新后满足”。
条件表达式:输入 where 条件表达式,具体规则见本章节前述的 where 条件规则说明。设置 where 条件后点击检查条件检测输入内容的合法性,然后单击生成过滤规则

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