一、目的

由于一些雷达死了但是又需要有数据进行展示,于是就把这些雷达的历史数据,修改日期为当前日期后,增量同步到ClickHouse中,

二、难点

1、获取当前日期,并且修改历史数据的create_time字段的日期部分

2、如果采用增量表输出的话,还需要获取ClickHouse表中的最新时间,这样有2个变量参数

三、插入更新方法

mysql 监测某个字段更新 mysql更新时间字段_mysql

(一)获取系统信息

mysql 监测某个字段更新 mysql更新时间字段_clickhouse_02

(二)字段选择1

mysql 监测某个字段更新 mysql更新时间字段_mysql_03

(三)字段选择2

mysql 监测某个字段更新 mysql更新时间字段_mysql_04

(四)mysql表输入

mysql 监测某个字段更新 mysql更新时间字段_字段_05

(五)字段选择3

mysql 监测某个字段更新 mysql更新时间字段_clickhouse_06

(六)clickhouse插入 / 更新

由于这次需求不存在更新,因此只使用插入功能

mysql 监测某个字段更新 mysql更新时间字段_etl_07

(七)执行情况

如果表中数据没有,执行成功后插入

如果表中有数据,执行成功后输出为0。不会重复导入

mysql 监测某个字段更新 mysql更新时间字段_etl_08

四、增量表输出方法

mysql 监测某个字段更新 mysql更新时间字段_clickhouse_09

(一)链条1为插入更新的前面一部分

(二)newtime

select(
select
formatDateTime(create_time,'%Y/%m/%d')
from hurys_dc.b_statistics
order by formatDateTime(create_time,'%Y/%m/%d') desc limit 1) as  new_day

备注:这个有点问题,如果目标表有这一天其他雷达的数据,就不能获取目标雷达的最新日期,除非在ClickHouse中建立雷达编号表,然后left join后指定目标雷达的最新日期。

而且,除非某一天增加雷达的话,这这种方式只能获取这台雷达第2 天的数据,除非增加雷达这一天kettle任务还没运行,所以还是用插入更新

mysql 监测某个字段更新 mysql更新时间字段_mysql_10

由于每天执行1次任务,因此需要获取表中时间戳字段的最新日期new_day,与系统日期对比

(三)替换NULL值

mysql 监测某个字段更新 mysql更新时间字段_etl_11

(四)字段选择4

mysql 监测某个字段更新 mysql更新时间字段_mysql 监测某个字段更新_12

(五)记录关联 (笛卡尔输出)

mysql 监测某个字段更新 mysql更新时间字段_clickhouse_13

当系统日期day字段>表中最新日期new_day字段后,MySQL中的数据则通过

(六)表输出

mysql 监测某个字段更新 mysql更新时间字段_mysql 监测某个字段更新_14

(七)执行情况

mysql 监测某个字段更新 mysql更新时间字段_mysql_15

如果表中数据没有,那么能执行成功,数据导入

如果表中有该数据,也能执行成功,只是没有数据导入,这样避免重复数据

(八)重复验证

多次执行任务后,查验表中数据是否重复导入

这样两种方法都能搞定,只不过增量表输出效率比较好一点