二百二十三、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任务就配置成功了!

相关推荐
SelectDB技术团队17 小时前
SelectDB 架构演进与 ClickHouse 迁移指南
大数据·数据库·clickhouse·云原生·架构·数据分析·apache doris
Francek Chen2 天前
【大数据处理与分析】数据仓库Hive:08 Impala
数据仓库·hive·hadoop·数据分析·impala
ClickHouseDB2 天前
使用 ClickHouse 与 Massive 构建实时市场数据应用
clickhouse
秉寒-CHO2 天前
从 ClickHouse 到 StarRocks:我在真实业务中怎么选明细、聚合、主键模型
大数据·clickhouse
IT界的老黄牛3 天前
ClickHouse 运维 SQL 速查:system 表查跑批、内存、合并与磁盘一篇通
大数据·clickhouse·磁盘占用·命令速查·运维排查·system表
大鳥3 天前
JSON 解析最佳实践:从入门到生产级优化
hive·sql·spark·json
wengad4 天前
podman安装clickhouse
clickhouse·podman
泡干脆面就番茄4 天前
Hive窗口函数:从原理到三大面试题
大数据·数据仓库·hive·hadoop
程序员梅雨4 天前
Hive面试总结
hive·hadoop·面试
l1t7 天前
duckdb、clickhouse、datafusion、cedardb、tableauhyperapi 5种分析型数据库执行递归求数独SQL比较
数据库·sql·clickhouse