需要用Kettle从Hive的DWS层库表数据增量同步到ClickHouse的ADS层库表中,不过这次的增量判断字段是day字段,不像之前的create_time字段
因为day字段需要转换类型,而 create_time字段字段不需要转换类型,因此两者的Kettle任务配置有所不同,也踩了一些坑,因此再写一篇博客整理一下,根据day字段判断的情况下kettle如何配置才能从Hive增量导入到ClickHouse中
下面博客链接是之前根据create_time字段判断进行从Hive到ClickHouse的增量导入
一百二十八、Kettle——从Hive增量导入到ClickHouse(根据create_time字段判断)
http://t.csdnimg.cn/ygzN5http://t.csdnimg.cn/ygzN5
create table if not exists dws_statistics_volume_1day(
device_no string comment '设备编号',
scene_name string comment '场景名称',
lane_no int comment '车道编号',
lane_direction string comment '车道流向',
section_no int comment '断面编号',
device_direction string comment '雷达朝向',
sum_volume_day int comment '每天总流量',
week_day string comment '周几',
month string comment '月份'
)
comment '统计数据流量表——动态分区——1天周期'
partitioned by (day string)
stored as orc
;
create table if not exists hurys_dc_ads.ads_statistics_volume_1day(
device_no String comment '设备编号',
scene_name String comment '场景名称',
lane_no int comment '车道编号',
lane_direction String comment '车道流向',
section_no int comment '断面编号',
device_direction String comment '雷达朝向',
sum_volume_day int comment '每天总流量',
week_day String comment '周几',
month String comment '月份',
day Date comment '日期'
)ENGINE = MergeTree
PARTITION BY (day)
PRIMARY KEY day
order by day
TTL day + toIntervalMonth(12)
SETTINGS index_granularity = 8192;
1.表输入控件:在输入控件模块
2.替换NULL值控件:在应用模块
3.字段选择控件:在转换控件模块
4.表输出控件:在输出控件模块
通过SQL语句获取clickhouse表最新的day字段时间
select(
select
cast(day as varchar(50))
from hurys_dc_ads.ads_statistics_volume_1day
order by day desc limit 1) as day
注意:SQL语句中的day字段需要转换类型cast(day as varchar(50)),因为ClickHouse中day字段是Date字段类型
防止由于目标表没有数据而导致异常,因此给第一个表输入控件的时间字段赋值
通过SQL语句查询Hive中的增量数据
select
cast(device_no as varchar(50)),
cast(scene_name as varchar(50)),
lane_no,
cast(lane_direction as varchar(50)),
section_no,
cast(device_direction as varchar(50)),
sum_volume_day,
cast(week_day as varchar(50)),
cast(month as varchar(50)),
cast(day as varchar(50))
from hurys_dc_dws.dws_statistics_volume_1day
where day > ?
注意:String类型的字段需要转换类型,类似 cast(day as varchar(50))
经测试:
--int字段、float、timestamp字段都可以直接用 --string字段 cast(device_no as varchar(50))
注意:这里的day字段千万不要选择Date字段类型
点击获取字段,检查相同字段名是否映射
之前已运行过任务,Hive表中数据并没增加,因此再次运行增量导入任务的话,就会显示数据为0
这样,根据day字段判断并从Hive增量导入到ClickHouse的Kettle任务就配置成功了!