二百二十四、Kettle——曲线实现从Hive插入更新到ClickHouse(分区字段是month或year)

一、目的

对于以month、year为分区字段的数据,不是像day字段分区那样每天增量插入更新即可,而是要以部分字段查询、部分字段更新,但是ClickHouse数据库并不适合更新操作,直接使用Kettle的插入更新控件会导致问题,必须曲线实现这个功能

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

(一) Hive的DWS层建表语句

create  table  if not exists  dws_avg_volume_day_month(scene_name             string      comment '场景名称',device_direction       string      comment '雷达朝向',sum_volume_month       int         comment '每月总流量',count_day              int         comment '每月总天数',avg_volume_day_month   int         comment '月均维度的日平均流量'
)
comment '月均维度的日平均流量表'
partitioned by (month string)
stored as orc
;

(二)ClickHouse的ADS建表语句

create  table  if not exists  hurys_dc_ads.ads_avg_volume_day_month(scene_name             String      comment '场景名称',device_direction       String      comment '雷达朝向',sum_volume_month       int         comment '每月总流量',count_day              int         comment '每月总天数',avg_volume_day_month   int         comment '月均维度的日平均流量',month                  String      comment '月份'
)ENGINE = MergeTree
PARTITION BY (month)
PRIMARY KEY month
order by month
SETTINGS index_granularity = 8192;

对于这类表,每天执行任务时scene_name、device_direction、month等String字段基本并不需要变,只有sum_volume_month、count_day、avg_volume_day_month等Int字段需要每日更新

三、对于插入更新这种需求,一般使用Kettle的增量插入更新

(一)似MySQL关系型数据库

如果似MySQL这种关系型数据库,适合增删改查等事务性操作,那么可以直接用Kettle的插入更新控件

1、Kettle的插入更新任务步骤(样例直接全量插入更新)

(1)关键是插入更新控件配置

2、在MySQL中直接修改表中数据

3、再次运行Kettle任务

4、在MySQL目标表中验证数据

数据量并没增加,只是发生更新

(二)类ClickHouse列式存储数据库

但是,对于ClickHouse这种列式存储数据库,不适合删除、修改等事务性操作,则没法直接使用Kettle的插入更新控件

1、Kettle的插入更新任务步骤

(1)关键是插入更新控件配置

用来查询的关键字是不需要基本不需要变更的字段,一般是主键,如果没有主键则几个字段组合成主键

更新字段是所有字段,不能把更新N,否则相关字段只能插入不能更新

2、用Kettle插入更新控件实现增量插入更新后,如果数据没有更改则运行没有问题

3、但是如果更改部分字段的数据,则会报错

(1)先在Hive中增加一天数据以增加DWS层表中数据

(2)再次运行Kettle任务,则会报错

所以,对于相同的插入更新控件配置,导入MySQL插入更新可以,导入ClickHouse插入更新则失败!

四、对于从Hive到ClickHouse,要实现插入更新的功能,只能先删除ClickHouse表数据再导入数据

(一)删除ClickHouse数据方式

删除ClickHouse数据虽然有几种方法,可以delete,也可以删除分区,也可以truncate,也可以TTL设置保存时间,还可以删除数据文件,但是对这种需要即时删除ClickHouse表中最新的分区数据,无法用delete、TTL等方式实现,而删除分区又太麻烦,刚好这几张表的数据量较少,因此先采用truncate方式,先删除表数据,再全量导入即可

(二)truncate方式实现方法

1、SQL运行

2、在表输出控件中勾选✔剪裁表

这两种方式都试过,都可以!

但是为了避免勾选✔剪裁表后面可能导致问题,还是实现SQL实现稳妥些

五、Kettle任务步骤

(一)执行SQL脚本

(二)hive输入

(三)字段选择

(四)clickhouse输出

(五)保存后运行kettle任务

(六)查看ClickHouse中表数据

六、验证是否实现插入更新功能

(一)删除Hive中1天的数据

(二)运行Kettle任务

(三)查看ClickHouse中表数据

数据量不变,只是2月份的数据发生改变,算是实现了ClickHouse插入更新的功能!

后面如果有更好的方法就再完善,目前能用就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805299.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Win11系统cmd输入“ipconfig”报错:ipconfig不是内部或外部命令

方法一: 正常系统添加系统变量,看佬的wp:【网络】解决‘ipconfig不是内部或外部命令,也不是可运行的程序_ifconfig不是内部或外部命令,也不是可运行的程序-CSDN博客 方法二: 1.下载everything 2.搜索ipconfig 3.去…

网络安全笔记总结

IAE引擎 1.深度检测技术--DFI和DPI技术 DFI和DPI都是流量解析技术,对业务的应用、行为及具体信息进行识别,主要应用于流量分析及流量检测。 DPI:深度包检测技术 DPI是一种基于应用层的流量检测和控制技术,对流量进行拆包&#x…

个人博客系列-前端部署-创建框架(4)

项目环境介绍 Vue3 Vite TypeScript 服务器:阿里云contos node版本:v18.18.2 npm版本:v10.2.4 执行下面一行命令,创建vue3框架 npm create vuelatest修改端口:9528, 此步骤可以忽略(使用默…

发电机组启动前的准备和检查注意事项

发电机组启动前的准备: 1.检查润滑油的油位、 冷却液液位、燃油量; 2.检查机的供油、润滑、冷却等系统各个管路及接头有无漏油漏水现象; 3.检查电气线路有无破皮等漏电隐患,接地线电气线路是否松动,机组与基础的连接是…

工作中常见问题总结

工作中常见错误清单 1、springboot实现无数据库启动 问题 springboot往往是作为b/s系统的server端的架子来使用,但是有些时候,是作为静默的server,并没有界面和数据库,但是springboot默认是链接数据库的,如何解决这个…

bean 实例化的三种方式与生命周期

目录 构造方法(常用)静态工厂实例工厂与 FactoryBeanbean 生命周期控制配置方法接口方法bean 生命周期阶段 构造方法(常用) 提供可访问的构造方法 public class BookDaoImpl implements BookDao {public BookDaoImpl() {// ...}…

Rust之构建命令行程序(四):用TDD(测试-驱动-开发)模式来开发库的功能

开发环境 Windows 11Rust 1.75.0 VS Code 1.86.2 项目工程 这次创建了新的工程minigrep. 用测试-驱动模式来开发库的功能 既然我们已经将逻辑提取到src/lib.rs中,并将参数收集和错误处理留在src/main.rs中,那么为代码的核心功能编写测试就容易多了。我…

STM32F103x 的时钟源

AHB (Advanced High-performance Bus) 高速总线,用来接高速外设的。 APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的,包含APB1 和 APB2。 APB1:上面连接的是低速外设,包括电源接口、备份接口、 CAN 、 US…

k8s的svc流量通过iptables和ipvs转发到pod的流程解析

文章目录 1. k8s的svc流量转发1.1 service 说明1.2 endpoints说明1.3 pod 说明1.4 svc流量转发的主要工作 2. iptables规则解析2.1 svc涉及的iptables链流程说明2.2 svc涉及的iptables规则实例2.2.1 KUBE-SERVICES规则链2.2.2 KUBE-SVC-EFPSQH5654KMWHJ5规则链2.2.3 KUBE-SEP-L…

HTTP概要

文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP,即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…

VUE基础知识九 ElemrntUI项目

ElementUI官网 一 项目 最终完成的效果: 切换上边的不同按钮,下方显示不同的表格数据 在src/components下新建不同业务组件的文件夹 1.1 搭建项目 使用脚手架搭建项目后,引入ElementUI(搭建、引入ElementUI步骤在第七节里已…

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024)

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024) 会议简介 能源动力、机械自动化和航空航天技术国际学术会议(ICEPMAT2024)将于2024年在北京举行。会议将探讨能源动力、机械自动化、航空航天技术领域的新研究热点、核心技术和发展趋…

vue手写卡片切换,并且点击获取到卡片信息

需求:做一个卡片样式的列表,之后有一些基本信息,之后卡片选中后样式不一样,默认选中第一个卡片,点击卡片后可以获取到卡片的信息 一、效果 二、关键代码 index默认重0开始,activeTable默认为0,0-0等于0,但…

【Django开发】0到1开发美多shop项目:Celery短信和用户注册。全md文档笔记(附代码,已分享)

本系列文章md笔记(已分享)主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

消息队列MQ详解(Kafka、RabbitMQ、RocketMQ、ActiveMQ等)

文章目录 概述消息中间件的优势(异步削峰解耦)消息队列的缺点消息中间件模式分类消息队列使用场景和应用场景消息中间件常用协议消息中间件的组成如何实现高吞吐量MQ 如何避免消息堆积消息堆积如何处理如何解决消息队列的延时以及过期失效问题&#xff1…

电子元件分销商

Top 10 Active Electronic Parts Distributors List – 2022 / 2023 一家从众多制造商那里收购所有电子元件并销售给客户的公司被称为电子元件分销商。 A company that acquires all electronic components from numerous manufacturers and sells them to customers from a si…

【挖坑前后指针版】快速排序(3)

目录 挖坑版 整体思路 图解分析 代码实现 前后指针版 整体思路 图解分析 代码实现 在前面我们基于hoare的思想实现了hoare版本的快速排序,但是我们发现hoare版本的快排,易错点太多也不是那么容易理解,所以基于hoare的思想有创新了挖…

欢迎 Gemma: Google 最新推出开源大语言模型

今天,Google 发布了一系列最新的开放式大型语言模型 —— Gemma!Google 正在加强其对开源人工智能的支持,我们也非常有幸能够帮助全力支持这次发布,并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型:7B 参数…

Redis能保证数据不丢失吗?

引言 大家即使没用过Redis,也应该都听说过Redis的威名。 Redis是一种Nosql类型的数据存储,全称Remote Dictionary Server,也就是远程字典服务器,用过Dictionary的应该都知道它是一种键值对(Key-Value)的数…

网关服务gateway注册Consul时报错Consul service ids must not be empty

网关服务gateway启动时,初始化Consul相关配置时报错。 Consul service ids must not be empty, must start with a letter, end with a letter or digit, and have as interior characters only letters, digits, and hyphen: cbda-server-gateway:10.111.236.142:…