SQL 必知必会
陈旸
清华大学计算机博士
73338 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

46丨数据集成:如何对各种数据库进行集成和转换?

创建文本文件输出
创建过滤记录
创建数据库查询
创建表输入组件
启动执行转换
创建插入/更新组件
创建表输入组件
整个工作流的控制
数据操作的定义
命令行方式完成作业执行
命令行方式完成转换执行
图形界面
加载到目的地
数据过滤
数据验证
数据清洗
数据字段映射
增量抽取
全量抽取
提供统一的数据源
统一收集和整理数据
数据转换
字段标识不统一
数据冗余
不同DBMS
需要进行集成
实例2:导入用户交易流水
实例1:数据库同步
Job
Transformation
Kitchen
Pan
Spoon
数据加载
数据转换
数据抽取
Extract, Transform, Load
数据集成的重要性
数据可能存在问题
数据分散在不同数据源中
Kettle使用实例
Kettle工具
ETL
数据集成

该思维导图由 AI 生成,仅供参考

我们的数据可能分散在不同的数据源中,如果想要对这些数据分析,就需要先对这些数据进行集成。同时因为不同的来源,这些数据可能会存在各种问题,比如这些数据源采用了不同的 DBMS,数据之间存在冗余的情况,比如某一条数据在不同的数据源中都有记录,那么在数据集成中我们只保留其中的一条就可以了。除此以外,这些不同的数据源还可能字段标识不统一,再或者我们需要将数据转换成我们想要的格式要求进行输出。
数据集成是数据分析之前非常重要的工作,它将不同来源、不同规范以及不同质量的数据进行统一收集和整理,为后续数据分析提供统一的数据源。
好了,关于这部分内容,今天我们一起来学习下:
我们将数据从 OLTP 系统中转换加载到 OLAP 数据仓库中,这中间重要的步骤就是 ETL。那什么是 ETL 呢?
认识 Kettle 工具。在 Kettle 中有两个重要的脚本,分别是 Transformation 转换和 Job 作业,它们分别代表什么?
完成两个实例项目。通过使用 Kettle 完成 MySQL 数据表的数据同步,以及根据我们的需求将银行客户转账的记录导出到目标文件中。

什么是 ETL

在使用数据的时候,根据需求,我们可以分成 OLTP 和 OLAP 两种场景。OLTP 更注重数据的实时性,而 OLAP 更注重数据的分析能力,对时效性要求不高。在这个过程中,我们的数据源来自于 OLTP 系统,而最终得到的数据仓库则应用在 OLAP 系统中,中间的转换过程就是 ETL,如下图所示:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kettle是一款免费开源的ETL工具,通过抽取、转换和加载数据,将数据从不同数据源整合到目的地。本文提供了一个实例项目,展示了Kettle工具的具体应用。文章详细介绍了如何使用Kettle完成数据转换的步骤,包括创建表输入组件、数据库查询、过滤记录和文本文件输出等操作。通过实例展示,读者可以了解Kettle在数据集成中的作用和原理,以及其易于配置和使用的特点。此外,文章还提出了一个问题,引发读者思考如何使用Kettle完成更复杂的数据转换。整体而言,本文通过实例操作和问题引导,使读者对Kettle的使用有了一定的了解,同时展现了Kettle在数据集成中的灵活性和实用性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • Coool
    用Java查询sql返回结果: package bw.jg.HelloMySql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class SelectInfo { public static void main(String[] args){ try { /* * 数据库连接 */ String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"; final String user = "root"; final String password = ""; Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password); System.out.println("连接成功"); Statement stmt=conn.createStatement();//创建一个Statement对象 String sql="SELECT t.*,CASE CONCAT( a1.customer_type, a2.customer_type ) WHEN 10 THEN \'公对私交易\' WHEN 01 THEN \'私对公交易\' WHEN 11 THEN \'公对公交易\' WHEN 00 THEN \'私对私交易\' END AS trade_type FROM trade t LEFT JOIN account a1 ON t.account_id1 = a1.account_id LEFT JOIN account a2 ON t.account_id2 = a2.account_id";//生成一条sql语句 ResultSet rs=stmt.executeQuery(sql);//执行查询,把查询结果赋值给结果集对象 int id = 0; String account_id1 = null,account_id2 = null,trade_type=null; float amount = 0; System.out.println("id\t 转出账户\t\t\t 转入账户\t\t\t 金额 \t 交易类型"); while(rs.next()) { id=rs.getInt(1); account_id1=rs.getString(2); account_id2=rs.getString(3); amount=rs.getFloat(4); trade_type=rs.getString(5); System.out.println(id+"\t"+account_id1+"\t"+account_id2+"\t"+amount+"\t"+trade_type+"\t"); } System.out.println("获得查询结果集"); conn.close(); System.out.println("关闭数据库连接对象"); } catch (Exception e) { // TODO Auto-generated catch block System.out.println("引擎失败"); e.printStackTrace(); } } }

    作者回复: 多谢分享

    2019-10-30
    8
  • FengX
    老师,请问“JavaScript 代码”控件里的代码有什么作用?似乎只要“增加常量”控件就可以了。

    作者回复: 首先Kettle中可以支持Java或者JavaScript代码。你可以使用JavaScript 来做一些复杂的运算。在使用时,经常会用来创建JavaScript变量,对前面数据流中的数据进行计算,它会自动在上游数据流中添加新的列,从而为下面的数据流提供使用

    2019-09-25
    2
    2
  • mickey
    很早以前我们做ETL用的是informatica的powercenter产品,每天从铁通省库拖地市库到本地服务器。
    2019-09-25
    3
  • 风轻扬
    老师,有没有专门讲kettle使用的书籍或者网站之类的。想系统学习一下kettle
    2020-01-13
    2
  • 小虾米
    我们主要是用informatica搭建pipeline,从各种source比如SAP,Salesforce 提取数据到Oracle DB。接着用SSIS 做ETL,负责整合到stage DB;然后就是modeling的过程,最后输出的fact table 和 dimension table做成cube。要分析的话可以用SSAS做MDX query或者excel 的power query,当然也可以搭入PowerBI或者Tableau或者SSRS做可视化,甚至可以用Einstein做可控分析。很多变可控。
    2020-11-12
    1
  • 湮汐
    我们使用的是 Datax 去进行抽数,但是它有一个问题:单点问题,要是抽到一般发生崩溃,那就没办法了
    2020-05-18
    1
  • Coool
    老师,能否讲一讲怎么用eclipse怎么连接MYSQL以及如何对表进行操作?
    2019-10-28
    2
    1
  • mickey
    流程如下: 表输入脚本:select t.*,a1.customer_type c1,a2.customer_type as c2 from trade t left join account a1 on t.account_id1=a1.account_id left join account a2 on t.account_id2=a2.account_id 表输入 --> 对公? --> 企业JS代码 ---> 公对公? ---> 公对公JS代码 ---> 公对公常量--->文本输出 | |--------->公对私JS代码 ----> 公对私常量---| | N | | ------> 个人JS代码 ---> 公对公? ---> 私对公JS代码 ---> 私对公常量 ---| |---------> 私对私JS代码 ---> 私对私常量 ---| 输出结果: account_id1;account_id2;amout;value 322202020312335;622202020312337;200.0;【公对私】客户发送的交易 622202020312337;322202020312335;400.0;【私对公】客户发送的交易 622202020312336;322202020312337;300.0;【私对公】客户发送的交易 322202020312335;322202020312336;100.0;【公对公】客户发送的交易
    2019-09-25
    1
  • mickey
    SQL脚本里,刘备的账号有点问题:“622202020311237”改为“622202020312337”
    2019-09-25
    1
  • piboye
    Flink Sql 是不是更适合了?
    2022-10-11归属地:广东
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部