Kettle的实战练习指南:从数据导入到ETL自动化

news2024/12/23 2:33:43

        在数据集成和数据仓库建设中,Kettle作为一个强大的开源ETL工具,提供了灵活的数据抽取、转换和加载功能。本文将通过实战案例,详细介绍Kettle在数据导入、ETL流程设计、自动化任务调度等方面的应用。

一、数据导入

1. SQL语句导入

导入sql语句,支持拖拽

加入你导入sql失败了,将sql语句中的创建数据库的语句删除掉,手动的创建shop数据库,再导入sql即可。

创建一个新的数据库:shop_bi

2. 数据库区分

  • 业务数据库shop):支撑业务运行。
  • 分析型数据库shop_bi):数据分析工程师操作,减轻业务数据库负担。

二、Kettle实现ETL

1. 数据同步

ODS层

贴源层,与原数据库结构相似。

将 shop数据库中的数据导⼊到 shop_bi 中。

image.png

表同步

areas表同步

设置更新操作,确保字段映射正确。

设置 更新 操作:

设置另个一数据库的连接:

执行SQL语句,创建表ods_areas:

此时发现ods_areas表中,需要一个字段(dt),该字段表示什么时候更新的这个数据。

goods_cats表同步

确保执行创建表SQL语句。

以上错误原因是没有执行创建表的SQL语句。

2. 定时任务

每周定时执行

设置Kettle作业,每周周一1点自动执行数据同步。

这样就可以达到每周周一1点进行数据同步的目的。

3. 日常数据抽取

获取特定日期数据

如何获取一个orders表中某一天的数据

使用SQL语句筛选特定日期数据。

方式1:
select * from orders where createTime like  '2019-06-22%';

方式2:
select * from orders where createTime >=  '2019-06-22 00:00:00' and createTime <='2019-06-22 23:59:59';

方式3:
select * from orders where substr(createTime,1,10) = '2019-06-22';

select *,str_to_date('${dt}','%Y-%m-%d') dt from orders where substr(createTime,1,10) = '${dt}';
也可以使用下面这个:
SELECT *,str_to_date('${dt}','%Y-%m-%d') as dtime FROM shop.orders  where createTime like '${dt}%'
如何传递参数

传递参数,确保数据准确性。

必须保证预览有数据才可以:

插入\更新操作设置:

执行SQL语句建表的时候:出现错误

一般出现这个错误,就把数据类型,变为小写,再执行一遍。

4. 多表数据同步

goods、users、order_goods

goods数据:

SELECT *,str_to_date(now(),'%Y-%m-%d %H:%i:%s') as dt
FROM goods
where subStr(createTime,1,10) = '${dt}'

后面的users 以及order_goods 操作是一样的。

三、自动化任务调度

1. 每天执行的任务

Job任务:设置Kettle作业,每天自动执行数据抽取和同步任务。

 每天执行的任务,做一个Job

image.png

image.png

以上步骤结束了,但是每天都需要修改一下dt 的参数。

image.png

目前还没有分析数据,没有分析任何的指标。分析的时候再shop_bi数据库上,减轻shop数据库的负担。

2. 获取前一天日期

方法一:使用正则表达式获取

使用正则表达式获取当前时间,传递给任务中的变量。

在sql语句中,可以获取前一天的日期:

select date_sub(str_to_date('2023-09-23','%Y-%m-%d'), INTERVAL 1 DAY);
INTERVAL 是间隔的意思

可以将以前的sql修改为:
select *,date_sub(str_to_date(?,'%Y-%m-%d'), INTERVAL 1 DAY) dt
from orders where substr(createTime,1,10) = date_sub(str_to_date(?,'%Y-%m-%
d'), INTERVAL 1 DAY);

获取前一天的数据另一个sql:
select adddate(str_to_date('2023-09-23','%Y-%m-%d'), -1);

新建转换:

通过这个工具可以获取当前时间

在脚本中选择正则表达式脚本。为什么搞这个,因为我想从上一个步骤中获取年-月-日三个数据。

创建一个脚本,选择正则表达式,编写解析的正则表达式:

2023/09/25 10:20:07.986

(\d{4})/(\d{2})/(\d{2})\s\d{2}:\d{2}:\d{2}\.\d{3}
为什么在前面的年月日需要添加括号,因为括号括起来叫做组,可以通过别的方式获取组的数据,由于其他数据我不需要获取,所以不加括号

在脚本中创建正则表达式

新建作业--设置变量,使用线连接。

运行查看结果:

结果正确,保存,留着以后使用。

继续回归到项目中:

新建转换,选中 [ 作业 ],获取变量。

接着输入选择表输入,使用如下sql语句:

select *,date_sub(str_to_date(?,'%Y-%m-%d'), INTERVAL 1 DAY) dt
from orders where substr(createTime,1,10) = date_sub(str_to_date(?,'%Y-%m-%d'), INTERVAL 1 DAY);

开始编辑:获取变量这个 job

可以点击预览一下。

创建表输出为--插入更新 操作

修改数据库中的一条数据(orders表):

回顾:整个步骤只有两步,第一步设置变量

第二步:使用变量:

方法二:使用Java代码获取

使用Java代码获取前一天日期,并传递给任务中的变量。

1)编辑java代码
一个输入参数,一个输出参数,给定一个日期,获取这个日期的前一天的日期。

image.png

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
    if (first) {
        first = false;
    }
    Object[] r = getRow();
    if (r == null) {
        setOutputDone();
        return false;
    }
    r = createOutputRow(r, data.outputRowMeta.size());
    String foobar = get(Fields.In, "dt").getString(r);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    // 创建Calendar对象,并设置为传⼊的时间
    Calendar calendar = Calendar.getInstance();
    try {
        calendar.setTime(format.parse(foobar));
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
    // 将Calendar的⽇期减1,即为昨天的⽇期
    calendar.add(Calendar.DATE, -1);
    // 获取昨天的⽇期
    Date yesterdayDate = calendar.getTime();
    // System.out.println("昨天的时间:" + yesterdayDate);
    // 将昨天的⽇期格式化为指定格式
    String yesterdayStr = sdf.format(yesterdayDate);
    // 设置需要输出的字段
    get(Fields.Out, "yesterday").setValue(r, yesterdayStr);
    // Send the row on to the next step.
    putRow(data.outputRowMeta, r);
    return true;
}

image.png


2) 设置输入 为系统时间
操作步骤跟之前一样,数据名称必须是 dt, 值是 系统时间(可变)

image.png


测试一下,从java代码中点击【测试类】

image.png

image.png


确实可以获取到dt的数据。
创建一个作业--设置变量,操作跟之前一样。

image.png


运行一下查看结果是否正确:

image.png


接着可以在项目中使用:
在作业中,拉取【获取变量】,输入是表输入,输出是插入更新

image.png


点击获取变量,输入yesterday。

image.png


表输入中的sql语句如下:

select *,str_to_date(?,'%Y-%m-%d') dt
from order_goods where substr(createTime,1,10) = str_to_date(?,'%Y-%m-%d');

image.png


修改获取变量,因为我的sql语句中有两个 ? ,表示需要两个参数。

image.png


表输出的设置:

image.png


记得先创建表,执行sql语句。

image.png


执行任务,查看结果。

image.png


 

四、总结

        Kettle不仅提供了强大的数据抽取和转换功能,还支持灵活的任务调度和自动化处理。通过本文的实战案例,读者可以更好地理解和应用Kettle,提高数据集成的效率和准确性。希望这篇文章能帮助你更好地掌握Kettle的实战应用。

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

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

相关文章

机器人速度雅可比矩阵求解(2自由度平面关节机器人)

关节速度和末端速度空间的映射需要计算雅可比矩阵的逆矩阵,在博途PLC里如何计算一个方阵的逆矩阵,大家可以参考下面这篇文章: 博途PLC矩阵求逆 矩阵求逆 博图SCL_博图矩阵运算-CSDN博客文章浏览阅读839次。本文介绍如何用C语言实现矩阵求逆的过程,详细解析了相关代码,适…

Openai gym environment for multi-agent games

题意&#xff1a;用于多智能体游戏的 OpenAI Gym 环境 问题背景&#xff1a; Is it possible to use openais gym environments for multi-agent games? Specifically, I would like to model a card game with four players (agents). The player scoring a turn starts the…

如何使用地图Picker快捷接入地图服务?

在移动互联网的浪潮中&#xff0c;地图能力的使用已成为应用开发的关键领域。对于依赖地理位置信息的应用而言&#xff0c;用好地图服务不仅是基本要求&#xff0c;更是提升用户体验、实现个性化服务的关键。 但是在使用地图服务过程中&#xff0c;地图组件提供的设置参数种类…

Python学习——【4.5】数据容器:set集合

文章目录 【4.5】数据容器&#xff1a;set集合一、集合的定义格式二、集合的特点三、集合的常见操作四、集合的遍历 【4.5】数据容器&#xff1a;set集合 一、集合的定义格式 为什么使用集合 我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。为…

Day4-C语言高级编程

1. gcc和gdb的用法 GNU工具&#xff1a;编译工具&#xff1a;把一个源程序编译为一个可执行程序调试工具&#xff1a;能对执行程序 进行源码或汇编调试软件工程工具&#xff1a;用于协助多人开发或大型软件项目的管理&#xff0c;如make、CVS、Subvision其他工具&#xff1a;用…

DHCP服务器搭建

1. DHCP工作原理 DHCP动态分配IP地址&#xff0c;客户端广播&#xff0c;服务端单播 2. DHCP服务器安装 2.1 安装DHCP # yum install -y dhcp-server 2.2 修改配置文件 # cd /etc/dhcp/ # ls # vi dhcpd.conf dhcpd.conf 主配置文件 第一行&#xff1a;全局dhcp服务器地…

STM32cubeMX + VScode开发GD32移植(HAL库通用),保姆级!!!!!!!

STM32cubeMX VScode开发GD32移植(HAL库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 STM32cubeMX VScode开发GD32移植(HAL库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#…

构建高可用和高防御力的云服务架构第五部分:PolarDB(5/5)

引言 云计算与数据库服务 云计算作为一种革命性的技术&#xff0c;已经深刻改变了信息技术行业的面貌。它通过提供按需分配的计算资源&#xff0c;使得数据存储、处理和分析变得更加灵活和高效。在云计算的众多服务中&#xff0c;数据库服务扮演着核心角色。数据库服务不仅负…

828华为云征文 | 云服务器Flexus X实例:RAG 开源项目 FastGPT 部署,玩转大模型

目录 一、FastGPT 简介 二、FastGPT 部署 2.1 下载启动文件 2.2 开放端口权限 2.3 启动 FastGPT 三、FastGPT 运行 3.1 登录 FastGPT 3.2 知识库 3.3 应用 四、总结 本篇文章主要通过 Flexus云服务器X实例 部署 RAG 开源项目 FastGPT&#xff0c;通过 FastGPT 可以使…

【5】AT32F437 OpenHarmony轻量系统移植教程(2)

开源地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 学习本文档的意义 1.学习移植OpenHarmony轻量系统到AT32全系列mcu上&#xff0c;本文档移植的具体型号为AT32F437ZMT7 2.学习OpenHarmony轻量系统开发 3.适配vprintf, vfprintf, printf, snprintf 和sprintf 1…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中&#xff0c;我们已经知道如何使用枚举类直接接受前端的数字类型参数&#xff0c;省去了麻烦的转换。如果数据库需要保存枚举类的code&#xff0c;一般做法也是代码中手动转换&#xff0c;那么能不能通过某种机制&#xff0c;省去转换&#xff0c;达到代码中直接保…

中间件安全(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 前文链接&#xff1a;中间件安全&#xff08;一&#xff09; 本文主要讲解Couchdb数据库未授权越权漏洞&#xff08;CVE-2017-12635&#xff09;。 靶场链接&#xff1a;Vu…

(11)(2.1.2) DShot ESCs(三)

文章目录 前言 5 附加配置 前言 DShot 是一种数字 ESC 协议&#xff0c;它允许快速、高分辨率的数字通信&#xff0c;可以改善飞行器控制&#xff0c;这在多旋翼和 quadplane 应用中特别有用。 5 附加配置 DShot更新率 发送 DShot 脉冲的频率可以通过SERVO_DSHOT_RATE配置…

jvm中的程序计数器、虚拟机栈和本地方法栈

引言 本文主要介绍一下jvm虚拟机中的程序计数器、虚拟机栈和本地方法栈。 程序计数器 作用 作用&#xff1a;记录下一条jvm指令的执行地址。 下面具体描述一下程序计数器的作用。 这里有两个代码&#xff0c;右边的为源代码&#xff0c;左边为编译之后的字节码。 当我们…

#面试系列-腾讯后端一面

03.腾讯后端一面 项目相关 面试官可能是 Go 方向的&#xff0c;我面试的是 Java 方向的&#xff0c;所以面试官也没有问我简历上的项目&#xff0c;主要问了实验室中做的项目&#xff0c;哪个项目比较有技术挑战&#xff1f; 面试主要问了计算级网络相关&#xff0c;以及如果让…

企业应该怎样合理使用AI技术与混合云?

企业合理使用AI技术和混合云的关键在于明确业务目标、评估技术需求并制定相应的战略规划。下面是一些指导原则和步骤&#xff0c;可以帮助企业有效地结合AI技术和混合云&#xff1a; 1. 定义业务目标 明确需求&#xff1a;确定哪些业务流程可以通过AI优化&#xff0c;哪些数据处…

Python和R及MATLAB和C与Lua去相关生物医学图像处理和神经网络物理学及数学变换算法

&#x1f3af;要点 主成分分析降维显微镜成像精度评估算法脑电图磁共振成像降噪算法图像颜色分离显现特征球面转换:主成分分析和零相位分量分析零相位分量分析和主成分分析平均互相关算法图像白化计算噪声协方差和绘制白化数据高能物理分类器分离不同信号白化变换优化批量归一…

【贪心算法】贪心算法二

贪心算法二 1.最长递增子序列2.递增的三元子序列3.最长连续递增序列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列 题目链…

828华为云征文 | 使用Flexus X实例搭建Dubbo-Admin服务

一、Flexus X实例简介 华为云推出的Flexus云服务&#xff0c;作为专为中小企业及开发者设计的新一代云服务产品&#xff0c;以其开箱即用、体验卓越及高性价比而著称。其中的Flexus云服务器X实例&#xff0c;更是针对柔性算力需求量身打造&#xff0c;能够智能适应业务负载变化…

pick你的第一个人形机器人——青龙强化学习环境测试

文章目录 一、环境配置二、开始训练三、训练成果 最近感受到的大趋势是具身智能&#xff0c;强化学习&#xff0c;模仿学习做人形机器人&#xff0c;这个赛道很火&#xff0c;颇有前些年全力投入做自动驾驶的架势&#xff0c;正好最近用强化学习解决POMDP问题接触到了强化学习&…