日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数仓第5篇:『数据魔法』ETL

發布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数仓第5篇:『数据魔法』ETL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 導讀:
  • 一、數據同步之道
    • 01. sqoop
    • 02. DataX
    • 03. kettle
    • 04. canal
    • 05. StreamSets
  • 二、ETL之技術棧
    • 2.1 工具
    • 2.2 語言
  • 三、ETL加載策略
    • 01. 增量
    • 02. 全量
    • 03. 拉鏈
  • 四、結束語

導讀:

ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。

ETL工具或類ETL的數據集成同步工具或語言,企業生產中工具也非常之多,主流的etl工具有Sqoop、DataX、Canal、flume、Logstash、kettle、DataStage、Informatica、Talend等,語言有強悍的SQL、Shell、Python、Java、Scala等。而數據源多為業務系統,埋點日志,離線文件,第三方數據等。

一、數據同步之道

01. sqoop

Sqoop,SQL-to-Hadoop 即 “SQL到Hadoop和Hadoop到SQL”。

是Apache開源的一款在Hadoop和關系數據庫服務器之間傳輸數據的工具。主要用于在Hadoop與關系型數據庫之間進行數據轉移,可以將一個關系型數據庫(MySQL ,Oracle等)中的數據導入到Hadoop的HDFS中,也可以將HDFS的數據導出到關系型數據庫中。

sqoop命令的本質是轉化為MapReduce程序。sqoop分為導入(import)和導出(export),策略分為table和query,模式分為增量和全量。

命令簡單示例:

02. DataX

DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構數據源之間高效的數據同步功能。
github地址:https://github.com/alibaba/DataX

支持數據源:

DataX本身作為離線數據同步框架,采用Framework + plugin架構構建。將數據源讀取和寫入抽象成為Reader+Writer插件,納入到整個同步框架中。

目前已到datax3.0框架設計:

datax使用示例,核心就是編寫json配置文件job:

03. kettle

Kettle,中文名:水壺,是一款國外免費開源的、可視化的、功能強大的ETL工具,純java編寫,可以在Windows、Linux、Unix上運行,數據抽取高效穩定。

Kettle家族目前包括4個產品:Spoon、Pan、CHEF、Kitchen。

Kettle的最大特點:

01.免費開源:基于Java免費開源軟件

02.易配置:可跨平臺,綠色無需安裝

03.不同數據庫:ETL工具集,可管理不同數據庫的數據

04.兩種腳本文件:transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制

05.圖形界面設計:托拉拽,無需寫代碼

06.定時功能:在Job下的start模塊,有一個定時功能,可以每日,每周等方式進行定時

04. canal

canal是阿里巴巴旗下的一款開源項目,純Java開發。基于數據庫增量日志解析,提供增量數據實時訂閱和消費,目前主要支持了MySQL,也支持mariaDB。

很多大型的互聯網項目生產環境中使用,包括阿里、美團等都有廣泛的應用,是一個非常成熟的數據庫同步方案,基礎的使用只需要進行簡單的配置即可。

github地址:https://github.com/alibaba/canal

當前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

canal是通過模擬成為mysql 的slave的方式,監聽mysql 的binlog日志來獲取數據,binlog設置為row模式以后,不僅能獲取到執行的每一個增刪改的腳本,同時還能獲取到修改前和修改后的數據,基于這個特性,canal就能高性能的獲取到mysql數據數據的變更。

05. StreamSets

Streamsets是一個大數據實時采集ETL工具,可以實現不寫一行代碼完成數據的采集和流轉。通過拖拽式的可視化界面,實現數據管道(Pipelines)的設計和定時任務調度。

數據源支持MySQL、Oracle等結構化和半/非結構化,目標源支持HDFS、Hive、Hbase、Kudu、Solr、Elasticserach等。創建一個Pipelines管道需要配置數據源(Origins)、操作(Processors)、目的地(Destinations)三部分。

Streamsets的強大之處:

拖拽式可視化界面操作,No coding required 可實現不寫一行代碼

強大整合力,100+ Ready-to-Use Origins and Destinations,支持100+數據源和目標源

可視化內置調度監控,實時觀測數據流和數據質量

二、ETL之技術棧

2.1 工具

重工具,kettle、DataStage、Informatica 三大工具依舊牢牢穩固傳統數倉三大主力位置。kettle與時俱進,在大數據數倉,如一些互聯網公司也有在使用kettle。

工具本文不再多做介紹。

2.2 語言

開發語言,傳統數倉一般SQL/Shell為主,互聯網數倉又對Python、Java、Scala提出了新的要求。

不管是傳統數倉,還是基于Hadoop生態的構建的(hive、spark、flink)數倉,SQL雖然戲碼在下降,但依然是重頭戲。強大的存儲過程,更是屹立不倒,這么多年都在熠熠生輝。

善于發現的你,一定會發現,在大數據生態,不管哪種數據處理框架,總有一天都會孵化出強大SQL的支持。如Hive SQL,Spark SQL,Blink SQL 等。此時,你或許會得出一個結論:SQL是最好的語言!
對于SQL,基本技能也是必備技能。

各種join、嵌套/標量子查詢,強大的分析/窗口函數,變化無窮的正則表達式,層次查詢,擴展分組,MODEL,遞歸with,多維分析,排列組合,行列互轉,json解析,執行計劃,四大類型(dql、dml、ddl、dcl)等,依然需要每個etl·er熟悉掌握。

SQLjoin,left/rignt/full join,每一個join都是暗藏韻理,on和where也不容小覷。

分析函數 簡捷高效,4類30+個分析/窗口函數最全總結
SQL開發規范和執行計劃也需要每個erl·er在實際實踐中不斷加強、提煉、升級。
SQL開發規范 示例:

如果你還在傳統數倉領域,如果你還想將薪比薪,建議趕緊開始學Java、scala,擁抱大數據生態Hadoop/Spark/Flink,機會總是垂青有準備的人。

三、ETL加載策略

數據集成加載策略,按類型可包括快照、流水、增量、全量、拉鏈等。

01. 增量

有些表巨大,我們需要選擇增量策略,新增delta數據需要和存量數據merge合并。欣賞并學習兩種處理方式,直接上圖,可斟酌體會:
Merge方式(一)

Merge方式(二)
1)只有新增數據

2)新增+刪除

02. 全量

每天一個全量表,也可一個分區一個全量。

03. 拉鏈

拉鏈表,記錄數據生命周期,記錄一條數據生命周期的開始和結束。

建議在設計拉鏈表的時候不僅要有開始時間和結束時間,最好再加一個生命狀態字段,如chain_status:有效 active、失效 expired、歷史 history。

回想一下前面文章介紹的緩慢變化維,可類比SCD的TYPE2,有異曲同工之處

全量拉鏈,或許會存在性能問題,故建議根據實際業務場景中進行取舍,可只和最近一個時間周期(eg:1個月)的進行拉鏈處理。

四、結束語

學思想,數據思維;

學Java,走大數據;

學實時,不怕被淘汰!

總結

以上是生活随笔為你收集整理的数仓第5篇:『数据魔法』ETL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。