什么是数据集成

我们采集的数据经常会有冗余重复的情况。举个简单的例子,假设你是一个网络综艺节目的制片人,一共有 12 期节目,你一共打算邀请 30 位明星作为节目的嘉宾。你知道这些明星影响力都很大,具体在微博上的粉丝数都有标记。于是你想统计下,这些明星一共能直接影响到微博上的多少粉丝,能产生多大的影响力。

然后你突然发现,这些明星的粉丝数总和超过了 20 亿。那么他们一共会影响到中国 20 亿人口么?显然不是的,我们都知道中国人口一共是 14 亿,这 30 位明星的影响力总和不会覆盖中国所有人口。

那么如何统计这 30 位明星真实的影响力总和呢?这里就需要用到数据集成的概念了。

数据集成就是将多个数据源合并存放在一个数据存储中(如数据仓库),从而方便后续的数据挖掘工作。

据统计,大数据项目中 80% 的工作都和数据集成有关,这里的数据集成有更广泛的意义,包括了数据清洗、数据抽取、数据集成和数据变换等操作。这是因为数据挖掘前,我们需要的数据往往分布在不同的数据源中,需要考虑字段表达是否一样,以及属性是否冗余。

数据集成的两种架构:ELT 和 ETL

数据集成是数据工程师要做的工作之一。一般来说,数据工程师的工作包括了数据的 ETL 和数据挖掘算法的实现。算法实现可以理解,就是通过数据挖掘算法,从数据仓库中找到“金子“。

什么是 ETL 呢?ETL 是英文 Extract、Transform 和 Load 的缩写,顾名思义它包括了数据抽取、转换、加载三个过程。ETL 可以说是进行数据挖掘这项工作前的“备菜”过程。

抽取是将数据从已有的数据源中提取出来。

转换是对原始数据进行处理,例如将表输入 1 和 表输入 2 进行连接形成一张新的表。


如果是三张表连接的话,可以怎么操作呢?先将表输入 1 和表输入 2 进行连接形成表输入 1-2,然后将表输入 1-2 和表输入 3 进行连接形成新的表。然后再将生成的新表写入目的地。

根据转换发生的顺序和位置,数据集成可以分为 ETL 和 ELT 两种架构。

ETL 的过程为提取 (Extract)——转换 (Transform)——加载 (Load),在数据源抽取后首先进行转换,然后将转换的结果写入目的地。

ELT 的过程则是提取 (Extract)——加载 (Load)——变换 (Transform),在抽取后将结果先写入目的地,然后利用数据库的聚合分析能力或者外部计算框架,如 Spark 来完成转换的步骤。

目前数据集成的主流架构是 ETL,但未来使用 ELT 作为数据集成架构的将越来越多。这样做会带来多种好处:

  • ELT 和 ETL 相比,最大的区别是“重抽取和加载,轻转换”,从而可以用更轻量的方案搭建起一个数据集成平台。使用 ELT 方法,在提取完成之后,数据加载会立即开始。一方面更省时,另一方面 ELT 允许 BI 分析人员无限制地访问整个原始数据,为分析师提供了更大的灵活性,使之能更好地支持业务。
  • 在 ELT 架构中,数据变换这个过程根据后续使用的情况,需要在 SQL 中进行,而不是在加载阶段进行。这样做的好处是你可以从数据源中提取数据,经过少量预处理后进行加载。这样的架构更简单,使分析人员更好地了解原始数据的变换过程。

ETL 工具有

介绍完了这两种架构,你肯定想要知道 ETL 工具都有哪些?典型的 ETL 工具有:

  • 商业软件:Informatica PowerCenter、IBM InfoSphere DataStage、Oracle Data Integrator、Microsoft SQL Server Integration Services 等
  • 开源软件:Kettle、Talend、Apatar、Scriptella、DataX、Sqoop 等

相对于传统的商业软件,Kettle 是一个易于使用的,低成本的解决方案。国内很多公司都在使用 Kettle 用来做数据集成。

Kettle 工具的使用

Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,可以在 Window 和 Linux 上运行,不需要安装就可以使用。Kettle 中文名称叫水壶,该项目的目标是将各种数据放到一个壶里,然后以一种指定的格式流出。

Kettle 在 2006 年并入了开源的商业智能公司 Pentaho, 正式命名为 Pentaho Data Integeration,简称“PDI”。因此 Kettle 现在是 Pentaho 的一个组件,下载地址

在使用 Kettle 之前还需要安装数据库软件和 Java 运行环境(JRE)。

Kettle 采用可视化的方式进行操作,来对数据库间的数据进行迁移。它包括了两种脚本:Transformation 转换和 Job 作业。

  • Transformation(转换):相当于一个容器,对数据操作进行了定义。数据操作就是数据从输入到输出的一个过程。你可以把转换理解成为是比作业粒度更小的容器。在通常的工作中,我们会把任务分解成为不同的作业,然后再把作业分解成多个转换。
  • Job(作业):相比于转换是个更大的容器,它负责将转换组织起来完成某项作业。

如何创建 Transformation(转换)

Transformation 可以分成三个步骤,它包括了输入、中间转换以及输出。

在 Transformation 中包括两个主要概念:Step 和 Hop。Step 的意思就是步骤,Hop 就是跳跃线的意思。

  • Step(步骤):Step 是转换的最小单元,每一个 Step 完成一个特定的功能。在上面这个转换中,就包括了表输入、值映射、去除重复记录、表输出这 4 个步骤;
  • Hop(跳跃线):用来在转换中连接 Step。它代表了数据的流向。

如何创建 Job(作业):

完整的任务,实际上是将创建好的转换和作业串联起来。在这里 Job 包括两个概念:Job Entry、Hop。

  • Job Entry(工作实体):Job Entry 是 Job 内部的执行单元,每一个 Job Entry 都是用来执行具体的任务,比如调用转换,发送邮件等。
  • Hop:指连接 Job Entry 的线。并且它可以指定是否有条件地执行。

在 Kettle 中,你可以使用 Spoon,它是一种一种图形化的方式,来让你设计 Job 和 Transformation,并且可以保存为文件或者保存在数据库中。下面我来带你做一个简单的例子。

案例 1:如何将文本文件的内容转化到 MySQL 数据库中

阿里开源软件:DataX

在以往的数据库中,数据库都是两两之间进行的转换,没有统一的标准,转换形式是这样的:

但 DataX 可以实现跨平台、跨数据库、不同系统之间的数据同步及交互,它将自己作为标准,连接了不同的数据源,以完成它们之间的转换。
DataX 的模式是基于框架 + 插件完成的,DataX 的框架如下图:

在这个框架里,Job 作业被 Splitter 分割器分成了许多小作业 Sub-Job。在 DataX 里,通过两个线程缓冲池来完成读和写的操作,读和写都是通过 Storage 完成数据的交换。比如在“读”模块,切分后的小作业,将数据从源头装载到 DataXStorage,然后在“写”模块,数据从 DataXStorage 导入到目的地。

这样的好处就是,在整体的框架下,我们可以对 Reader 和 Writer 进行插件扩充,比如我想从 MySQL 导入到 Oracle,就可以使用 MySQLReader 和 OracleWriter 插件,装在框架上使用即可。

Apache 开源软件:Sqoop

Sqoop 是一款开源的工具,是由 Apache 基金会所开发的分布式系统基础架构。Sqoop 在 Hadoop 生态系统中是占据一席之地的,它主要用来在 Hadoop 和关系型数据库中传递数据。通过 Sqoop,我们可以方便地将数据从关系型数据库导入到 HDFS 中,或者将数据从 HDFS 导出到关系型数据库中。

Hadoop 实现了一个分布式文件系统,即 HDFS。Hadoop 的框架最核心的设计就是 HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算。

总结

介绍了数据集成的两种架构方式,以及 Kettle 工具的基本操作。不要小看了 ETL,虽然它不直接交付数据挖掘的结果,但是却是数据挖掘前重要的工作,它包括了抽取各种数据、完成转化和加载这三个步骤。

因此除了数据科学家外,还有个工作职位叫 ETL 工程师,这份工作正是我们今天介绍的从事 ETL 这种架构工作的人。如果你以后有机会从事这份工作,你不仅要对今天介绍的数据集成概念有所了解,还要掌握至少一种 ETL 开发工具,如 Kettle、DataX、 Sqoop 等;此外还需要熟悉主流数据库技术,比如 SQL Server、PostgeSQL、Oracle 等。

讲了数据集成的两种架构,以及帮助我们实现 ETL 的工具 Kettle。纸上得来终觉浅,绝知此事要躬行。

这就是数据分析之数据集成相关推荐

  1. 这就是数据分析之数据变换

    如果一个人在百分制的考试中得了 95 分,你肯定会认为他学习成绩很好,如果得了 65 分,就会觉得他成绩不好.如果得了 80 分呢?你会觉得他成绩中等,因为在班级里这属于大部分人的情况. 为什么会有这 ...

  2. 这就是数据分析之数据可视化基础概念及工具

    图片在内容表达上,要远胜于文字,它不仅能体现数据真实性,还能给人很大的想象空间.如果你想做一名数据分析师,那么掌握可视化技能是必不可少的,因为在大部分情况下,老板更关心呈现的结果. 数据可视化的视图都 ...

  3. 数据集成方法发展与展望

    数据集成方法发展与展望 一. 摘要 二. 发展概要 三. 技术综述 3.1 早期数据集成技术 3.2 后续集成算法的发展 3.3 面向网页表格的数据集成技术 3.4 基于众包的数据集成技术 3.5 数 ...

  4. 【Python数据分析】数据预处理2——数据集成

    数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并存放在一个一致的数据存储位置(如数据仓库)中的过程. 一.实体识别 常见的实体识别有: 1.同名异义(两个不同数据源中属性名称相 ...

  5. 解读:大数据分析及其数据来源

    当我们谈到大数据分析,首先需要确定数据分析的方向和拟解决的问题,然后才能确定需要的数据和分析范围.大数据驱动的分析主要的挑战不是技术问题,而是方向和组织领导的问题,要确定方向,提出问题,需要对行业做深 ...

  6. 大数据分析的“数据来源”有哪些?

    当我们谈到大数据分析,首先需要确定数据分析的方向和拟解决的问题,然后才能确定需要的数据和分析范围.大数据驱动的分析主要的挑战不是技术问题,而是方向和组织领导的问题,要确定方向,提出问题,需要对行业做深 ...

  7. 多端异构数据集成方案

    概述 多端异构,一般来说这是数据集成系统最复杂的情况,而前面部分我们将讨论多端同构场景下的做法,再逐渐延伸到文章主题部分,即多端异构的场景. 多端同构 所谓多端同构,就是终端类型可以是多种,但是使用的 ...

  8. 读书笔记《数据挖掘概念与技术》第2章 数据预处理 2.4 数据集成和变换

    <数据挖掘:概念与技术(原书第2版)> 2.4 数据集成和变换 数据挖掘经常需要数据集成-合并来自多个数据存储的数据.数据还可能需要转换成适于挖掘的形式.本节介绍数据集成和数据变换. 2. ...

  9. 论数据集成技术的演变和发展 3/3

    上几期介绍了不同的技术和发展历程,本期着重介绍基于API的新一代面向服务框架(SOA)技术集成技术.由此类技术开发的集成平台,将系统连接.数据集成.业务逻辑全部通过松耦合集成于一体.为系统集成开发者通 ...

最新文章

  1. 手机麦克风声音太大_全民K歌必备利器,得胜PH-125手机K歌麦克风让你轻松拥有好声音...
  2. 一个SAP开发人员的2018年终总结
  3. SAP Cloud for Customer的Calculated field字段
  4. 03:数据结构 栈、队列、链表与数组
  5. 只安装和配置instantclient,用plsql developer,navicat for oracle,sqlplus连接oracle数据库 ....
  6. c++面向对象高级编程 学习十二 模板
  7. 人工智能只能用python吗_为什么人工智能用Python?
  8. mysql c api example_The MySQL C API 编程实例
  9. 比特精灵最新稳定版v3.6.0.401(转)
  10. bizagi simulation 仿真学习
  11. 常见的系统store procedure
  12. c语言日历程序 带农历,一个完整的日历程序(含有农历)
  13. 基于DDD的微服务设计和开发实战
  14. 交流电中为什么要用相量法?
  15. 计算机打印范围如何设定,cad如何设定打印范围
  16. 2D-X光图像重建3D-CT图像项目总结—后续补充
  17. 西瓜大战java_让“西瓜大战”来得更加猛烈些
  18. OpenCV和JavaCV--安装经验
  19. Vue.js中将时间戳转换为日期格式
  20. 2017 杭电多校联赛第二场 1003 Maximum Sequence(单调队列)HDU 6047

热门文章

  1. sqlyog同步mysql_大坑:用SQLyog连mysql的部分操作不能同步到从库
  2. ibiliplayer是什么_Bilibili视频播放页面接口整理(不定期更新)
  3. 查询各个年级的平均分_艰难困苦终生志,玉汝于成竟英才——高三年级期中考试总结暨优秀学生表彰会...
  4. httpf发送 json_Java发送http请求发送json对象
  5. 树莓派 鼠标延迟问题【Linux】
  6. linux的mysql本地yum安装_Linux系统下使用yum安装mysql
  7. 手机编写python脚本_python调用adb脚本来实现群控安卓手机初探
  8. android从一个活动到另一个活动,Android应用程序在将一个活动打开到另一个活动时崩溃...
  9. spring配置中使用的classpath*:是什么,和“classpath:”的区别
  10. 设计模式解密(12)- 桥接模式