限制读取内容

Setting up Data Reading Restraints

限制读取内容是对数据源中数据读取的限制配置,通常用于增量识别字段模式指定增量数据的获取。

关于此功能

在增量识别字段模式获取增量数据时,我们提供lastmax()函数配置的方式来指定增量数据获取。

在通过JDBC读取数据时,通过指定限制读取内容条件(即where语句)即可限制读取范围。

操作步骤

  1. 在数据映射--表映射页面点击限制读取内容按钮;

  2. 或在数据映射--字段映射页面点击编辑读取条件,进入限制读取内容配置弹窗:

  • 您可根据需求设置 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 字段最大值,并且只同步某一天的数据

注意事项

选择合适的增量识别字段有助于增量任务稳定运行,通常情况下选取日期、时间戳、数字自增id等字段作为增量识别字段配置相对容易,且计算更加稳定。

下一步

配置清洗脚本

最后更新于

这有帮助吗?