一篇文章搞懂数据仓库:常用ETL工具、方法
目錄
一、什么是ETL?
二、ETL &?ELT
三、常用的ETL工具
3.1 sqoop
3.2 DataX
3.3?Kettle
3.4?canal
3.5 StreamSets
四、ETL加載策略
4.1 增量
4.2 全量
4.3 流式
小編有話
一、什么是ETL?
ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程,是數據倉庫的生命線。
? ? ? ?抽取(Extract)主要是針對各個業務系統及不同服務器的分散數據,充分理解數據定義后,規劃需要的數據源及數據定義,制定可操作的數據源,制定增量抽取和緩慢漸變的規則。
? ? ? ?轉換(transform)主要是針對數據倉庫建立的模型,通過一系列的轉換來實現將數據從業務模型到分析模型,通過ETL工具可視化拖拽操作可以直接使用標準的內置代碼片段功能、自定義腳本、函數、存儲過程以及其他的擴展方式,實現了各種復雜的轉換,并且支持自動分析日志,清楚的監控數據轉換的狀態并優化分析模型。
裝載(Load)主要是將經過轉換的數據裝載到數據倉庫里面,可以通過直連數據庫的方式來進行數據裝載,可以充分體現高效性。在應用的時候可以隨時調整數據抽取工作的運行方式,可以靈活的集成到其他管理系統中。
二、ETL &?ELT
伴隨著數據倉庫的發展(傳送門:數據倉庫的八個發展階段),數據量從小到大,數據實時性從T+1到準實時、實時,ETL也在不斷演進。
在傳統數倉中,數據量小,計算邏輯相對簡單,我們可以直接用ETL工具實現數據轉換(T),轉換之后再加載到目標庫,即(Extract-Transform-Load)。但在大數據場景下,數據量越大越大,計算邏輯愈發復雜,數據清洗需放在運算能力更強的分布式計算引擎中完成,ETL也就變成了ELT(Extract-Load-Transform)。
即:Extract-Transform-Load? >>? Extract-Load-Transform
通常我們所說的ETL,已經泛指數據同步、數據清洗全過程,而不僅限于數據的抽取-轉換-加載。
三、常用的ETL工具
下面小編將介紹幾類ETL工具(sqoop,DataX,Kettle,canal,StreamSets)。
3.1 sqoop
- 是Apache開源的一款在Hadoop和關系數據庫服務器之間傳輸數據的工具。
- 可以將一個關系型數據庫(MySQL ,Oracle等)中的數據導入到Hadoop的HDFS中,也可以將HDFS的數據導出到關系型數據庫中。
- sqoop命令的本質是轉化為MapReduce程序。
- sqoop分為導入(import)和導出(export),
- 策略分為table和query
- 模式分為增量和全量。
3.2 DataX
- DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平臺
- 實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構數據源之間高效的數據同步功能。
3.3?Kettle
- 一款國外免費開源的、可視化的、功能強大的ETL工具,純java編寫,可以在Windows、Linux、Unix上運行,數據抽取高效穩定。
3.4?canal
- canal是阿里巴巴旗下的一款開源項目,純Java開發?;跀祿煸隽咳罩窘馕?#xff0c;提供增量數據實時訂閱和消費,目前主要支持了MySQL,也支持mariaDB。
3.5 StreamSets
- 是大數據實時采集ETL工具,可以實現不寫一行代碼完成數據的采集和流轉。通過拖拽式的可視化界面,實現數據管道(Pipelines)的設計和定時任務調度。
- 創建一個Pipelines管道需要配置數據源(Origins)、操作(Processors)、目的地(Destinations)三部分。
四、ETL加載策略
4.1 增量
- 有些表巨大,我們需要選擇增量策略,新增delta數據需要和存量數據merge合并。
- 兩種方法:
- merge(一)
- merge(二)
- 只有新增(full join。能拿更新表就拿更新表)
?
- 新增+刪除
- history-table Left join delet-table where delect-table.value is null == 表a
- 表a full join update-table (能拿update就拿update)
4.2 全量
每天一個全量表,也可一個hive天分區一個全量。
4.3 流式
使用kafka,消費mysql binlog日志到目標庫,源表和目標庫是1:1的鏡像。
小編有話
無論是全量還是增量的方式,都會浪費多余的存儲或通過計算去重,得到最新的全量數據。為解決這一問題,墻裂建議kafka的數據同步方案,源表變化一條,目標表消費一條,目標表數據始終是一份最新全量數據,且為實時同步的。?
ps.極端情況下可能會丟數,需要寫幾個監控監本(詳見數據質量篇)和補數腳本即可~
?
數倉系列傳送門:https://blog.csdn.net/weixin_39032019/category_8871528.html
總結
以上是生活随笔為你收集整理的一篇文章搞懂数据仓库:常用ETL工具、方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用detours实现劫持
- 下一篇: tensorflow知识点