本案例以mysql为案例描述
创造一个id带有重复的数据测试
注意
<1> 如果新表尚未建立,在设定好表输出后的新表名字后,点击【SQL】按钮,即可建立新的空表。如果数据庞大,在建表后,方案开始执行之前,记得 提前把需要的索引先建立出来。
<2>该操作,相当于把源数据,清洗冲洗输出一遍,需保证自己的磁盘空间够用。
看一下 我们的最终成功:
延伸:
数据集成及BI分析套件Pentaho的开源ETL组件
Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。在2006年,Pentaho公司收购了Kettle项目,原Kettle项目发起人Matt Casters加入了Pentaho团队,成为Pentaho套件数据集成架构师 [1] ;从此,Kettle成为企业级数据集成及商业智能套件Pentaho的主要组成部分,Kettle亦重命名为Pentaho Data Integration [1-2] 。Pentaho公司于2015年被Hitachi Data Systems收购。 [3] (Hitachi Data Systems于2017年改名为Hitachi Vantara [4] )
Pentaho Data Integration以Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。
Pentaho Data Integration分为商业版与开源版,开源版的截止2021年1月的累计下载量达836万,其中19%来自中国 [5] 。在中国,一般人仍习惯把Pentaho Data Integration的开源版称为Kettle。
广泛利用内部数据(例如:ERP、CRM、POS、设备数据、日志)以及外部数据(行业数据、宏观经济数据、社交媒体、评论)来对现有业务做各样分析以及对未来做预测,最终以数据驱动业务,已经是任何组织赖以生存的必要手段。然后,要使有价值的数据分析在组织内各层级管理人员的手机、Pad以及大屏呈现之前,数据必须先从各个源头进行抽取(Extract),加载(Load)至数据湖(Data Lake),然后需要对在大数据存储里(例如: Hadoop,S3,MongoDB)的数据各类加工,包括清洗(Cleanse)、把来自不同来源、不同格式的数据混合(Blend)、转换(Transform),再把数据按照分析需求进行建模(Modeling)和聚合(Aggregation),或者在数据挖掘之前进行数据预备和特征工程(Data Preparation & Feature Engineering),最终数据被加载至数据仓库或数据集市中。整个过程比30年前刚出现ETL的概念已经复杂了许多;再加上组织需要处理除了结构化数据(例如:传统关系型数据库),还包括非结构化数据(例如:日志、客户评论、图片),同时,各组织已不满足于T+1的滞后分析而纷纷对数据进行更有价值的实时或近实时数据分析(real-time or near-real-time analysis),导致数据集成(Data Integration)的复杂度大大提高。作为全球累计下载量超过835万,源于开源的数据集成平台 [5] ,Pentaho Data Integration平均每半年一次大版本升级,以应对数据集成不断变化的需求。
Pentaho Data Integration作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleaning)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。部分特色功能包括:
无代码拖拽式构建数据管道
Pentaho采用拖拽组件、连线、配置的方式来构建数据管道,透过超过200个不同的组件 [6] ,用户可以在不编写一句代码就能轻松完成对数据源读取,对数据进行关联、过滤、格式转换、计算、统计、建模、挖掘、输出到不同的数据目标。极大程度地降低开发技术门槛和有效减低开发和维护成本。
多数据源对接
关系型数据库支持类型包括:AS/400, DB2, Google BigQuery, Greenplum, Hive, Impala, MS SQL Server, MySQL, Oracle, PostgreSQL, SAP, Snowflake, SparkSQL, Sybase, Teradata, Vertica等 [7] 。大数据源支持包括:Avro, Cassanddra, HBase, HDFS, MongoDB, ORC, Parquet, Splunk等。文件格式支持包括:CSV, TXT, JSON, Excel, XML等。流数据支持包括:AMQP, JMS, Kafka, Kinesis, MQTT, 其他数据源对接包括:HL7, S3, SAS, Salesforce, HCP, REST等。
数据管道可视化
Pentaho Data Integration支持用户在数据管道任何一个步骤对当前数据进行查看(Examine),并可以在线以表格和图表(例如:柱状图、饼图等)输出步骤的数据,甚至可以支持不落地直接把任何一个步骤的数据以JDBC的方式提供给第三方应用访问 [8] 。
模板化开发数据管道
在数据抽取的过程中,ETL工程师通常要从众多不同的数据源把数据抽取到数仓的ODS层,或者到Hadoop的HDFS,整个过程的数据转换逻辑比较简单,但往往因为数据源很多而导致大量低价值重复开发工作,为了有效节省开发的时间和成本,Pentaho Data Integration提供了一个叫MDI的功能,MDI全称是Metadata Injection元数据注入,用户可以透过MDI把数据转换模板化,然后把像数据表名、文件路径、分隔符、字符集等等这些变量放在一个表或者文件里,然后利用MDI把这些变量注入数据转换模板,Pentaho Data Integration就能够自动生成所需要的数据转换了 [9] 。这个功能为很多客户节省了大量的开发时间。
可视化计划任务
Pentaho Data Integration提供可视化方式配置任务计划(Schedule),用户可透过Spoon或网页端的Pentaho User Console来配置和维护任务具体的执行时间、间隔、所使用的参数值、以及具体运行的服务器节点。用户亦可以透过Spoon或Pentaho User Console查看任务计划列表 [10] ;当然,用户也可以透过Spoon或Pentaho User Console对任务执行情况进行实时监控。
深度Hadoop支持
Pentaho Data Integration针对Hadoop主流厂家预置专用的对接插件,支持的Hadoop版本包括Cloudera, Hortonworks, AWS EMR, Google Dataproc等,用户除了可以透过插件轻松对接Hadoop集群的数据源(HDFS, Hive, HBase, Impala等)Pentaho还提供与Kerberos、Sentry和Ranger等Hadoop企业级安全机制对接,以满足企业安全要求;另外,Pentaho Data Integration的Pentaho MapReduce提供用户以无编码方式定义MapReduce任务;同时,用户亦可以在作业中执行Sqoop、Pig、MapReduce、Oozie和Spark任务。 [11]
数据任务下压Spark集群
对于很多使用Hadoop的企业,往往因为数据量大,考虑到性能,会以脚本的方式来在集群里直接进行数据转换,我们一般叫这个做ELT(Extract-Load-Transform),就是先把数据加载到Hadoop,再在Hadoop集群里进行转换。为了让用户仍然能够透过Pentaho Data Integration简单的拖拽方式构建数据转换管道,同时又可以让数据在集群里进行In-Cluster转换,Pentaho提供了把数据转换任务下压到Spark来执行的AEL(Adaptive Execution Layer)功能,搭建好的数据管道会被AEL转成Spark任务来执行 [12] ,这样数据就不需要离开集群,而是在集群里透过Spark强大的分布式处理能力来进行处理。
数据挖掘与机器学习支持
最新版的Pentaho9.1预置了超过20种数据挖掘算法类的转换步骤,用户可以轻松把把机器学习集成到数据管道里,用来做数据模型训练和进行预测分析。预置算法包括:决策树、深度学习、线性回归、逻辑回归、Naive贝尔斯、随机森林等等,用户也可以利用Pentaho Data Integration作数据预备,然后把数据以dataframe的方式输入到Python或R中进行模型训练或预测。