限制读取内容
Setting up Data Reading Restraints
限制读取内容是对数据源中数据读取的限制配置,通常用于增量识别字段模式指定增量数据的获取。
关于此功能
在增量识别字段模式获取增量数据时,我们提供lastmax()函数配置的方式来指定增量数据获取。
在通过JDBC读取数据时,通过指定限制读取内容条件(即where语句)即可限制读取范围。
操作步骤
在数据映射--表映射页面点击限制读取内容按钮;
或在数据映射--字段映射页面点击编辑读取条件,进入限制读取内容配置弹窗:
您可根据需求设置 WHERE 语句,DataPipeline 提供 last_max()函数帮助用户解决定时读取增量数据的需求。
对常规JDBC读取:
last_max()函数
使用该函数 DataPipeline 会取该任务下已同步数据中某一个字段的最大值,您可以使用该值作为 WHERE 语句读取条件。
使用 last_max()函数,在第一次执行该语句或对应字段暂无数值,则会忽略该函数相关的读取条件。
例子一:
已同步数据中,取某一个字段的最大值用于读取条件。
SELECT * FROM table1 WHERE _id>=last_max(_id)
注:每次执行批量读取时,使用 last_max 自定义函数取已同步数据中「_id」字段最大值,读取大于等于「id」已同步最大值的数据。
例子二:
以日期字段作为读取条件,每次只同步当前日期减一天的数据,并且只同步未曾读取的数据。
SELECT * FROM E_Commerce_Retail_Sales WHERE date >last_max(date) and date <=CURDATE()-1
每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步昨天的数据(date 字段值)。
对MongoDB Java Driver:
last_max()函数
使用该函数 DataPipeline 会取该任务下已同步数据中某一个字段的最大值,用户可以使用该值作为 find 语句读取条件。
用户使用last_max()函数,对应字段暂无数值,则会忽略该函数相关的读取条件。
当使用new ISODate或new ObjectId与last_max()函数同时使用时,需使用""将new ISODate或new ObjectId与last_max()函数包起来,且需加必要的转义字符。其中,new ObjectId只能与_id配合使用。
当需要指定多个条件时,多个条件间的关系仅支持and。
查询条件支持的字段类型:INT、LONG、DOUBLE、DATE。
例子一:
已同步数据中,取某一个字段最大值用于读取条件。
db.getCollection("col").find({"_id":{$gt:"new ObjectId("last_max(_id)")"}})
注:第一次执行批量读取时,读取全量。以后每次执行批量读取时,使用 last_max 自定义函数取已同步数据中「_id」字段最大值,读取大于等于「_id」已同步最大值的数据
例子二:
首次全量同步,之后以日期字段作为读取条件,每次只同步当前取到的最大日期减一天的数据,并且只同步未曾读取的数据。
db.getCollection("col").find({"t_date":{$gt:"new ISODate("last_max(t_date)")"}})
注:第一次执行批量读取时,同步全量。以后每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步某一天的数据
例子三:
只同步增量,以日期字段作为读取条件,每次只同步当前取到的最大日期减一天的数据,并且只同步未曾读取的数据。
db.getCollection("col").find({$and: [{"t_date":{$gt:"new ISODate("last_max(t_date)")"}}, {"t_date":{$gt:new ISODate("2022-08-21T08:00:00+08:00")}}]})
注:第一次执行批量读取时,只同步日期大于2022-08-21T08:00:00+08:00的数据。以后每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步某一天的数据
注意事项
下一步
配置清洗脚本最后更新于
这有帮助吗?