SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

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

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

什么是 ETL

在使用数据的时候,根据需求,我们可以分成 OLTP 和 OLAP 两种场景。OLTP 更注重数据的实时性,而 OLAP 更注重数据的分析能力,对时效性要求不高。在这个过程中,我们的数据源来自于 OLTP 系统,而最终得到的数据仓库则应用在 OLAP 系统中,中间的转换过程就是 ETL,如下图所示:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • Coool
    老师,能否讲一讲怎么用eclipse怎么连接MYSQL以及如何对表进行操作?
    2019-10-28
    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
    很早以前我们做ETL用的是informatica的powercenter产品,每天从铁通省库拖地市库到本地服务器。
    2019-09-25
    1
  • 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
  • Feng.X
    老师,请问“JavaScript 代码”控件里的代码有什么作用?似乎只要“增加常量”控件就可以了。

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

    2019-09-25
  • mickey
    SQL脚本里,刘备的账号有点问题:“622202020311237”改为“622202020312337”
    2019-09-25
收起评论
6
返回
顶部