一、目标
用Kettle把Hive的DWS层数据增量导入到ClickHouse中
工具版本:Kettle:8.2 Hive:3.1.2 ClickHouse21.9.5.16
二、前提准备
(一)kettle已连上Hive
cs'd(二)kettle已连上ClickHouse
三、实施步骤
(一)打开kettle,新建转换任务。拖拽2个表输入、替换NULL值、字段选择、表输出控件
1.表输入控件:在输入控件模块
2.替换NULL值控件:在应用模块
3.字段选择控件:在转换控件模块
4.表输出控件:在输出控件模块
(二)配置第一个表输入控件
1、目标
通过SQL语句获取clickhouse表的最新时间
2.实施步骤
第一步,双击表输入控件,打开操作界面
第二步,选择目标表所在的数据库
第三步,输入SQL语句获得目标表数据的最新时间
select(
select
create_time
from hurys_dc_ads.ads_area_traffic_status_1hour
order by create_time desc limit 1) as create_time
第四步,预览数据
(三)配置替换NULL值控件
1、目标
防止由于目标表没有数据而导致异常,因此给第一个表输入控件的时间字段赋值
2.实施步骤
第一步,双击替换NULL值控件,打开操作界面
第二步,点击获取字段
第三步,将字段值替换为1000-01-01 00:00:01 并且设置转换掩码yyyy-MM-dd HH:mm:ss
(四)配置第二个表输入控件
1、目标
通过SQL语句查询Hive中的增量数据
2.实施步骤
第一步,双击表输入控件,打开操作界面
第二步,选择数据源表所在的数据库
第三步,输入SQL语句以查询Hive中的增量数据
第一个坑:注意string字段类型的类型转换
经测试:
--int字段、float、timestamp字段都可以直接用 --string字段 cast(device_no as varchar(50))
select
cast(device_no as varchar(50)),
create_time,
start_time,
cast(name as varchar(50)),
lane_no,
lane_length,
target_count,
occupancy,
speed_avg,
cast(day as varchar(50))
from hurys_dc_dws.dws_area_traffic_status_1hour
where create_time > ?
第四步,勾选替换SQL语句里的变量
第五步,从步骤插入数据里选择替换NULL值
第六步,设置记录数量限制
(五)配置字段选择控件
1.在选择和修改页面,点击获取选择的字段
2.在元数据模块,点击获取改变的字段。修改相应的字段,比如字段名、字段类型、字段格式等等
第二个坑:这里的day字段千万不要选择Date字段类型
(六)配置表输出控件
1.在主选项页面
(1)可以修改步骤名称为clickhouse输出
(2)选择连接对应的clickhouse数据库、目标模式就是数据库名、目标表为表名
(3)勾选指定数据库字段
(4)勾选使用批量插入
2.在数据库字段页面
点击获取字段,检查相同字段名是否映射
(七)Ctrl+S保存,给kettle任务命名,然后点击运行
(八)再次点击运行一下kettle任务,验证是否增量导入
(九)在clickhouse表里检查数据,验证一下
这样,用kettle从hive到clickhouse的增量导入就成功了!