二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)

一、目的

实时数仓用的是ClickHouse,为了避免Hive还要清洗数据,因此就直接把ClickHouse中清洗数据同步到Hive中就行

二、所需工具

ClickHouse:clickhouse-client-21.9.5.16

Kettle:kettle9.2

Hadoop:hadoop-3.1.3

Hive:hive-3.1.2

海豚调度器:dolphinscheduler-2.0.5

三、技术路径

由于Hive中DWD层是静态分区表,而无法在Kettle中动态指定分区日期

因此只能每日执行kettle任务,从ClickHouse同步到HDFS中,然后到Hive清洗表的每日分区下

四、表结构

4.1 clickhouse

create  table  if not exists  hurys_jw.dwd_statistics(id                  String                          comment '唯一ID',device_no           String                          comment '设备编号',source_device_type  Nullable(String)                comment '设备类型',sn                  Nullable(String)                comment '设备序列号 ',model               Nullable(String)                comment '设备型号',create_time         DateTime                        comment '创建时间',cycle               Nullable(Int32)                 comment '统计数据周期' ,lane_no             Nullable(Int32)                 comment '车道编号',lane_type           Nullable(Int32)                 comment '车道类型 0:渠化1:来向2:出口3:去向4:左弯待转区5:直行待行区6:右转专用道99:未定义车道',section_no          Nullable(Int32)                 comment '断面编号',coil_no             Nullable(Int32)                 comment '线圈编号',volume_sum          Nullable(Int32)                 comment '不区分车型机动车总流量',volume_person       Nullable(Int32)                 comment '行人流量',volume_car_non      Nullable(Int32)                 comment '非机动车流量',volume_car_small    Nullable(Int32)                 comment '小车流量',volume_car_middle   Nullable(Int32)                 comment '中车流量',volume_car_big      Nullable(Int32)                 comment '大车流量',speed_avg           Nullable(Decimal(10, 2))        comment '平均速度(km/h)',speed_85            Nullable(Decimal(10, 2))        comment '85位速度(km/h)',time_occupancy      Nullable(Decimal(10, 2))        comment '时间占有率(%)',average_headway     Nullable(Decimal(10, 2))        comment '平均车头时距(s)',average_gap         Nullable(Decimal(10, 2))        comment '平均车间时距(s)',day                 Date                            comment '日期'
)
ENGINE = MergeTree
PARTITION BY day
PRIMARY KEY (day,id)
ORDER BY (day,id)
TTL day + toIntervalDay(7)
SETTINGS index_granularity = 8192;

4.2 hive

create external table  if not exists  hurys_db.dwd_statistics(id                  string              comment '唯一ID',device_no           string              comment '设备编号',source_device_type  string              comment '设备类型',sn                  string              comment '设备序列号 ',model               string              comment '设备型号',create_time         string              comment '创建时间',cycle               int                 comment '统计数据周期' ,lane_no             int                 comment '车道编号',lane_type           int                 comment '车道类型 0:渠化1:来向2:出口3:去向4:左弯待转区5:直行待行区6:右转专用道99:未定义车道',section_no          int                 comment '断面编号',coil_no             int                 comment '线圈编号',volume_sum          int                 comment '不区分车型机动车总流量',volume_person       int                 comment '行人流量',volume_car_non      int                 comment '非机动车流量',volume_car_small    int                 comment '小车流量',volume_car_middle   int                 comment '中车流量',volume_car_big      int                 comment '大车流量',speed_avg           decimal(10,2)       comment '平均速度(km/h)',speed_85            decimal(10,2)       comment '85位速度(km/h)',time_occupancy      decimal(10,2)       comment '时间占有率(%)',average_headway     decimal(10,2)       comment '平均车头时距(s)',average_gap         decimal(10,2)       comment '平均车间时距(s)'
)
comment '统计数据外部表——静态分区'
partitioned by (day string)
row format delimited fields terminated by ','
tblproperties("skip.header.line.count"="1")
;

五、实施步骤

5.1 Kettle任务(clickhouse到hdfs)

5.1.1 获取系统信息

5.1.2 字段选择1

5.1.3 自动获取当前日期1

//Script here

var currentDate = date; // 这里 date 应该是从输入流中获取的 Date 对象  
  
// 计算前一天的日期  
var previousDate = new Date(currentDate.getTime() - 24*60*60*1000); 

5.1.4 字段选择2

5.1.5 clickhouse输入

注意:day字段类型转换

5.1.6 字段选择3

5.1.7 Hadoop file output

5.1.8 运行kettle任务

5.1.9 HDFS文件

5.2 海豚任务(从HDFS到Hive表分区中)

5.2.1 配置海豚任务

#! /bin/bash
source /etc/profile

nowdate=`date --date='0 days ago' "+%Y%m%d"`
yesdate=`date -d yesterday +%Y-%m-%d`

hadoop fs -test -e  /user/hive/warehouse/hurys_db.db/dwd_statistics/day=$yesdate
if [ $? -ne 0 ]; then
    echo "文件不存在"
else 
    hdfs dfs -rm -r /user/hive/warehouse/hurys_db.db/dwd_statistics/day=$yesdate
fi

/usr/local/hurys/dc_env/kettle/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/clickhouse_to_hive/ -trans=01_ClickHouse_to_Hive_dwd_statistics

hdfs dfs -mkdir -p /user/hive/warehouse/hurys_db.db/dwd_statistics/day=$yesdate

hdfs dfs -mv /user/hive/warehouse/hurys_db.db/dwd_statistics/statistics.gz /user/hive/warehouse/hurys_db.db/dwd_statistics/day=$yesdate/statistics.gz

5.2.2 执行海豚任务

5.2.3 Hive分区表

5.2.4 刷新表分区,查看分区数据

--刷新表分区
msck repair table hurys_db.dwd_statistics;
--查看表分区
show partitions hurys_db.dwd_statistics;
--查看表数据
select * from hurys_db.dwd_statistics
where day = '2024-10-16';

搞定!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车免拆诊断案例 | 2019 款奥迪 A6L 车行驶中偶发熄火

故障现象  一辆2019款奥迪A6L车,搭载2.0T发动机,累计行驶里程约为9万km。车主反映,车辆行驶中偶发熄火,故障频率较高。 故障诊断  接车后试车,起动发动机,可以正常起动着机。使用故障检测仪检测&#x…

Vue项目的创建

安装Vue工具 Vue CLI Vue CLI Vue.js 开发的标准工具,Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 npm install -g vue/cli安装之后,你就可以在命令行中访问 vue 命令。你可以通过简单运行 vue,看看是否展示出了一份所有可用命令的…

基于SSM邮票鉴赏系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,邮票信息管理,邮票分类管理,文章信息管理,系统管理,个人分享管理 用户账号功能包括:系统首页,个人中心&…

【正点原子K210连载】第四十八章 自学习分类实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第四十八章 自学习分类实验 在上一章节中,介绍了利用maix.KPU模块实现了MNIST的手写数据识别,本章将继续介绍利用maix.KPU模块实现的自学习分类。通过本章的学习,读者将学习到自学习分类应用在CanMV上的实现。 本章分为如下几个小节&#xf…

Hallo2 长视频和高分辨率的音频驱动的肖像图像动画 (数字人技术)

HALLO2: LONG-DURATION AND HIGH-RESOLUTION AUDIO-DRIVEN PORTRAIT IMAGE ANIMATION 论文:https://arxiv.org/abs/2410.07718 代码:https://github.com/fudan-generative-vision/hallo2 模型:https://huggingface.co/fudan-generative-ai/h…

后端C++

前言 1. Task0 1.1 获取你的服务器 1.2 对服务器进行基本操作 分别创建文件夹dir_a, dir_b, dir_c进入dir_a,创建a.txt, b.txt, c.txt 将a.txt, b.txt, c.txt 分别复制成: a.txt.bak, b.txt.bak, c.txt.bak 将a.txt, b.txt, c.txt 分别重命名为: a_new.txt, b_new.txt, c_ne…

凹凸性和拐点的概念

二阶导不存在也可能是拐点 判断拐点的充分条件

Android Studio USB调试真机映射屏幕画面

Android Studio USB调试真机映射屏幕画面 文章目录 Android Studio USB调试真机映射屏幕画面一、USB连手机并设置开发者模式1.1 报错信息1.2 启用开发者选项和 USB 调试:1.3 手机配置选项 二、Android Studio 开启手机投屏功能 一、USB连手机并设置开发者模式 1.1 …

Flutter 小技巧之 equatable 包解析以及宏编程解析

今天我们聊聊 equatable 包的实现,并通过 equatable 去理解 Dart 宏编程的作用和实现,对于 Flutter 开发者来说,Dart 宏编程可以说是「望眼欲穿」。 equatable 正如 equatable 这个包名所示,它的功能很简单,主要是用…

计算机毕业设计hadoop+spark知识图谱中药推荐系统 中药材推荐系统 中药可视化 中药数据分析 中药爬虫 机器学习 深度学习 人工智能 大数据

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 摘 要 本文所探讨的领域是…

【Linux】“echo $变量“ 命令打印变量值的底层原理

在 shell 中,echo $变量 命令的工作原理涉及几个关键步骤,主要是由 shell 解释器来处理变量的查找和替换。以下是详细的过程: 变量展开的过程顺序 变量引用: 在命令行中,变量通常以 $variable_name 或 ${variable_…

若依前后端分离超详情版

若依系统安装流程 1.安装Ubuntu系统 1.1 新建虚拟机 打开VMware Workstation,选择文件->新建虚拟机->典型(推荐T)->安装程序光盘映像文件->输入虚拟的名字->一直下一步即可 安装程序光盘映像文件 注意:选择ub…

专业第三方的控价价值

在当今竞争激烈的商业世界中,价格管控犹如一场没有硝烟的战争。品牌们为了维护自身的市场秩序和品牌价值,纷纷踏上控价的艰难征程。而在这个过程中,专业的第三方控价服务公司正以创新之姿,成为品牌们的得力助手。 曾经&#xff0c…

空间数据分析实验04:空间统计分析

实验概况 实验目的 了解空间统计分析的基本原理掌握空间统计分析的常用方法 实验内容 根据某村的土地利用数据和DEM数据,提取各村组耕地面积比例,并将其与村组平均坡度进行相关性分析,最后计算各村组单元的景观多样性指数。 实验原理与方…

【设计模式-原型】

**原型模式(Prototype Pattern)**是一种创建型设计模式,旨在通过复制现有对象的方式来创建新对象,而不是通过实例化类来创建对象。该模式允许对象通过克隆(复制)来创建新的实例,因此避免了重新创…

你不常用的 FileReader 能干什么?

前言 欢迎关注同名公众号《熊的猫》,文章会同步更新,也可快速加入前端交流群! 本文灵感源于上周小伙伴遇到一个问题: “一个本该返回 Blob 类型的下载接口,却返回了 JSon 类型的内容!!&#xf…

HTML之表单设计

1、HTML表单 HTML表单是用于收集用户输入的信息,并将用户输入的内容信息传到后台服务器中。 表单是通过form标签实现。 特别注意:如果一些内容提交后,没有将内容提交给后台服务器,那么需要添加一个name属性,语法&am…

Stable Diffusion 3.5 震撼发布!最新开源 AI 图像生成模型,艺术创作必备神器!

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号&#xff…

【NOIP普及组】 装箱问题

【NOIP普及组】 装箱问题 💐The Begin💐点点关注,收藏不迷路💐 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0&…

KubeSphere 最佳实战:Kubernetes 部署集群模式 Nacos 实战指南

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 在本文中,我将为您提供…