一、目标

用Kettle把Hive的DWS层数据增量导入到ClickHouse中

工具版本:Kettle:8.2     Hive:3.1.2     ClickHouse21.9.5.16


二、前提准备

(一)kettle已连上Hive

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗

cs'd(二)kettle已连上ClickHouse 

ClickHouse可替代MySQL吗 clickhouse代替hive_hive_02

三、实施步骤

(一)打开kettle,新建转换任务。拖拽2个表输入、替换NULL值、字段选择、表输出控件

1.表输入控件:在输入控件模块

2.替换NULL值控件:在应用模块

3.字段选择控件:在转换控件模块

4.表输出控件:在输出控件模块

ClickHouse可替代MySQL吗 clickhouse代替hive_etl_03

(二)配置第一个表输入控件 

1、目标

通过SQL语句获取clickhouse表的最新时间

2.实施步骤

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗_04

第一步,双击表输入控件,打开操作界面
第二步,选择目标表所在的数据库
第三步,输入SQL语句获得目标表数据的最新时间
select(
 select
 create_time
 from  hurys_dc_ads.ads_area_traffic_status_1hour
 order by create_time desc limit 1) as  create_time
第四步,预览数据

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗_05

(三)配置替换NULL值控件

1、目标

防止由于目标表没有数据而导致异常,因此给第一个表输入控件的时间字段赋值

2.实施步骤

ClickHouse可替代MySQL吗 clickhouse代替hive_hive_06

 第一步,双击替换NULL值控件,打开操作界面
第二步,点击获取字段
第三步,将字段值替换为1000-01-01 00:00:01  并且设置转换掩码yyyy-MM-dd HH:mm:ss

(四)配置第二个表输入控件 

1、目标

通过SQL语句查询Hive中的增量数据

2.实施步骤

ClickHouse可替代MySQL吗 clickhouse代替hive_etl_07

 第一步,双击表输入控件,打开操作界面
第二步,选择数据源表所在的数据库
第三步,输入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.在选择和修改页面,点击获取选择的字段

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗_08

2.在元数据模块,点击获取改变的字段。修改相应的字段,比如字段名、字段类型、字段格式等等 

ClickHouse可替代MySQL吗 clickhouse代替hive_控件_09

第二个坑:这里的day字段千万不要选择Date字段类型

(六)配置表输出控件

1.在主选项页面

(1)可以修改步骤名称为clickhouse输出

(2)选择连接对应的clickhouse数据库、目标模式就是数据库名、目标表为表名

(3)勾选指定数据库字段

(4)勾选使用批量插入

ClickHouse可替代MySQL吗 clickhouse代替hive_clickhouse_10

 2.在数据库字段页面

点击获取字段,检查相同字段名是否映射

ClickHouse可替代MySQL吗 clickhouse代替hive_控件_11

 (七)Ctrl+S保存,给kettle任务命名,然后点击运行

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗_12

 (八)再次点击运行一下kettle任务,验证是否增量导入

ClickHouse可替代MySQL吗 clickhouse代替hive_ClickHouse可替代MySQL吗_13

 (九)在clickhouse表里检查数据,验证一下

ClickHouse可替代MySQL吗 clickhouse代替hive_控件_14

 这样,用kettle从hive到clickhouse的增量导入就成功了!