多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## SQL类型数据源读取条件设置 ****数据源为MySQL、Oracle、SQL server、Postgre SQL时,读取界面用户可以选择增量识别字段或者自定义读取条件****。 :-: ![](https://img.kancloud.cn/d4/13/d413163c5287be75d021252000f31ebf_1916x999.png =480x) * 设置读取条件 * 支持对每个数据表设置读取条件; * 读取模式为:「批量读取」,数据源为关系型数据库,用户可以设置和编辑读取条件 * 默认是读取整个表的数据,若用户未选择增量识别字段也未自定义读取条件,则系统每次都会读取整个表的数据,系统会按照主键字段去重,若表没有主键则每次同步目的地会有重复数据。 * 用户可以选用增量识别字段或者自定义读取条件来读取增量数据,两个只能选择其一,当用户设置了增量识别字段又去设置了自定义读取条件时,系统默认会把增量识别字段标识去掉,按照自定义读取条件来读取增量。 * 每张表都一直显示增量识别字段,用户可以选择任意字段作为增量识别字段。 * 选择一个字段作为增量识别字段后,下放显示出具体的执行语句。 * 例如用户选择「\_id」作为增量识别字段,执行语句显示为:SELECT \* FROM table1 WHERE \_id >= last\_max(\_id) * 允许用户自定义执行语句 * 点击「编辑读取条件」,立即弹窗显示编辑窗口。 * 若用户已勾选增量识别字段则要求清空增量识别字段标识以及where语句,只保留where语句前半部分不允许更改的内容。 * 用户可以参照左侧的样例来输入自定义的读取条件。 * 提供「试运行」按钮。 * 点击后执行当前sql语句,系统会返回增加 limit 10的结果供用户参考。 * 读取模式为:「实时模式」 * 数据源表结构不显示「增量识别」列。 * 若用户在任务设置界面选择读取「读取存量数据」,则在底部显示: * 存量数据执行语句:SELECT \* FROM table1 (具体的执行语句)。 * 用户可以设置SQL语句任务激活后会先执行该 SQL 语句(只读取一次),完成读写后再启动实时数据读取 * 样例介绍 * 用户可根据需求设置 Where 语句,DataPipeline 提供`last_max()`函数帮助用户解决定时读取增量数据的需求。 * `last_max()`函数 * 使用该函数 DataPipeline 会取该任务下已同步数据中某一个字段的最大值,用户可以使用该值作为 WHERE 语句读取条件。 * 用户使用`last_max()`函数,在第一次执行该语句或对应字段暂无数值,则会忽略该函数相关的读取条件。 **当数据源为MySQL时,** * 例子 1: * 已同步数据中,取某一个字段最大值用于读取条件。 ~~~ SELECT * FROM `table1` WHERE `_id` >= 'last_max(_id)' ~~~ * 注:每次执行批量读取时,使用 last\_max 自定义函数取已同步数据中 \_id 字段最大值,读取大于等于 \_id 已同步最大值的数据。 * 例子 2: * 以日期字段作为读取条件,每次只同步当前日期减一天的数据,并且只同步未曾读取的数据。 ~~~ SELECT * FROM `table1` WHERE `date` > 'last_max(date)' AND `date` <= CURDATE()-1 ~~~ * 注:每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步昨天的数据(date 字段值样例:2019-08-01) * 例子 3: * 以时间字段作为读取条件,每次只同步一个小时前的数据,并且只同步未曾读取的数据。 ~~~ SELECT * FROM `table1` WHERE `update_time` > 'last_max(update_time)' AND `update_time` <= DATE_SUB(NOW(), INTERVAL 24 HOUR) ~~~ * 注:每次只同步 update\_time 字段值大于已同步数据中 update\_time 字段最大值,并且只同步到当前时间减去 1 小时的数据(update\_time 字段值样例:2019-08-01 00:00:00) **当数据源为Oracle时,** * 例子 1: * 已同步数据中,取某一个字段最大值用于读取条件。 ~~~ SELECT * FROM "table1" WHERE "_id" >= 'last_max(_id)' ~~~ * 注:每次执行批量读取时,使用 last\_max 自定义函数取已同步数据中 \_id 字段最大值,读取大于等于 \_id 已同步最大值的数据。 * 例子 2: * 以日期字段作为读取条件,每次只同步当前日期减一天的数据,并且只同步未曾读取的数据。 ~~~ SELECT * FROM "table1" WHERE "date" > timestamp 'last_max(date)' AND "date" <= sysdate-1 ~~~ * 注: * 每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步昨天的数据(date 字段值样例:2019-08-01 00:00:00) * sysdate 函数会获取当前时间,若以当前时间作为条件做计算: * 减 1 天,可设置为:sysdate-1 * 减 1 小时,可设置为:sysdate-1/24 * 减 1 分钟,可设置为:sysdate-1/(24\*60) * 减 1 秒钟,可设置为:sysdate-1/(24\*60\*60) **当数据源为SQL Server时,** * 例子 1: * 已同步数据中,取某一个字段最大值用于读取条件。 ~~~ SELECT * FROM [table1] WHERE [_id] >= 'last_max(_id)' ~~~ * 注:每次执行批量读取时,使用 last\_max 自定义函数取已同步数据中 \_id 字段最大值,读取大于等于 \_id 已同步最大值的数据。 * 例子 2: * 以日期字段作为读取条件,每次只同步当前日期减一天的数据,并且只同步未曾读取的数据。 ~~~ SELECT * FROM [table1] WHERE date > last_max(date) AND [date] < DATEADD(dd, -1, getdate()) ~~~ * 注: * 每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步昨天的数据 * 支持 date 字段类型为 date(样例:2019-08-01) * 支持 date 字段类型为 datetime(样例:2018-05-14 17:00:16.35) * 支持 date 字段类型为 datetime2(样例:2018-05-14 17:00:16.352171) * 支持 date 字段类型为 smalldatetime(样例:2018-05-14 17:00:00.0) * getdate() 函数会获取当前时间,若以当前时间作为条件做计算: * 减 1 天,可设置为:DATEADD(dd,-1,getdate()) * 减 1 小时,可设置为:DATEADD(hh,-1,getdate()) * 减 1 分钟,可设置为:DATEADD(mi,-1,getdate()) * 减 1 秒钟,可设置为:DATEADD(ss,-1,getdate()) **当数据源为PostgreSQL时,** * 例子 1: * 已同步数据中,取某一个字段最大值用于读取条件。 ~~~ SELECT * FROM "table1" WHERE "_id" >= 'last_max(_id)' ~~~ * 注:每次执行批量读取时,使用 last\_max 自定义函数取已同步数据中 \_id 字段最大值,读取大于等于 \_id 已同步最大值的数据。 * 例子 2: * 以日期字段作为读取条件,每次只同步当前日期减一天的数据,并且只同步未曾读取的数据。 ~~~ SELECT * FROM "table1" WHERE date > last_max(date) AND "date" < DATEADD(dd, -1, getdate()) ~~~ * 注: * 每次只同步 date 字段值大于已同步数据中 date 字段最大值,并且只同步昨天的数据 * 支持 date 字段类型为 date(样例:2019-08-01) * 支持 date 字段类型为 timestamp(样例:2019-08-01 00:00:00) * getdate() 函数会获取当前时间,若以当前时间作为条件做计算: * 减 1 天,可设置为:current\_timestamp - interval '1 day' * 减 1 小时,可设置为:current\_timestamp - interval '1 hour' * 减 1 分钟,可设置为:current\_timestamp - interval '1 minute' * 减 1 秒钟,可设置为:current\_timestamp - interval '1 second'