二百二十三、Kettle——从Hive增量导入到ClickHouse(根据day字段判断)

一、目的

需要用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

二、Hive的DWS层建表语句和ClickHouse的ADS建表语句

(一)Hive的DWS层建表语句

复制代码
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
;

(二)ClickHouse的ADS建表语句

复制代码
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;

三、实施步骤

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

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

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

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

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

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

1、目标

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

2、实施步骤

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字段类型

(三)配置替换NULL值控件

1、目标

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

2、实施步骤

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

1、目标

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

2、实施步骤

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))

(五)配置字段选择控件

1.在选择和修改页面,点击获取选择的字段

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

注意:这里的day字段千万不要选择Date字段类型

(六)配置表输出控件

1.在主选项页面

2.在数据库字段页面

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

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

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

之前已运行过任务,Hive表中数据并没增加,因此再次运行增量导入任务的话,就会显示数据为0

这样,根据day字段判断并从Hive增量导入到ClickHouse的Kettle任务就配置成功了!

相关推荐
q***3754 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
现在,此刻1 天前
高可用与高性能数据库配置实践分析(pgSql && clickhouse)
数据库·clickhouse
yourkin6662 天前
clickhouse
clickhouse
努力成为一个程序猿.2 天前
Clickhouse数据副本和分片
运维·clickhouse·debian
l1t2 天前
改写ITPUB newkid的求解数独DuckDB SQL为Clickhouse格式
数据库·sql·clickhouse·duckdb
yumgpkpm2 天前
CMP(类Cloudera CDP 7.3 404版华为Kunpeng)与其他大数据平台对比
大数据·hive·hadoop·elasticsearch·kafka·hbase·cloudera
yumgpkpm3 天前
Hadoop大数据平台在中国AI时代的后续发展趋势研究CMP(类Cloudera CDP 7.3 404版华为鲲鹏Kunpeng)
大数据·hive·hadoop·python·zookeeper·oracle·cloudera
KANGBboy4 天前
ES 总结
hive·elasticsearch
现在,此刻4 天前
clickhouse和pgSql跨库查询方案对比
数据库·sql·clickhouse·性能优化
擎创夏洛克AIOps4 天前
数据存储新势力:Doris如何挑战ClickHouse的霸主地位?
clickhouse