ETL技術入門之ETL初認識,數據倉庫

ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。ETL一詞較常用在數據倉庫,但其對象並不限於數據倉庫。

ETL是什麼

ETL是Extract Transform Load三個英文單詞的縮寫 中文意思就是抽取、轉換、加載。說到ETL就必須提到數據倉庫。


先說下背景知識:

信息是現代企業的重要資源,是企業運用科學管理、決策分析的基礎。目前,大多數企業花費大量的資金和時間來構建聯機事務處理OLTP的業務系統和辦公自動化系統(例如電信行業的各種運營支撐系統、購物網站系統),用來記錄事務處理的各種相關數據。據統計,數據量每2~3年時間就會成倍增長,這些數據蘊含着巨大的商業價值,而企業所關注的通常只佔在總數據量的2%~4%左右。因此,企業仍然沒有最大化地利用已存在的數據資源,以致於浪費了更多的時間和資金,也失去制定關鍵商業決策的最佳契機。

在這個背景下,能夠給企業所有級別的決策制定過程提供支持的所有類型數據的戰略集合應運而生,他就是數據倉庫。數據倉庫的英文簡寫是Data Warehouse。數據倉庫就是把OLTP系統產生的數據 整合到一起 發掘其中的商業價值和提供決策支持用。舉個電信行業的例子 電信有系統每天會有客戶投訴的信息、寬帶羣體性障礙、客戶號碼的停機恢復時間記錄等等。這些數據都在各自的生產環境系統裏面。他們每個月會把這些數據整合到一起處理加工到數據倉庫裏面形成報表 其中有一個功能是可以對哪些用戶有離網銷號的傾向做出大概的判斷。這就是數據倉庫的價值所在。


那麼怎麼把數據弄到數據倉庫裏去呢,其中用到的一個技術就是ETL。


下面給下ETL的詳細解釋定義:

ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程)作爲DW的核心和靈魂,能夠按照統一的規則集成並提高數據的價值,是負責完成數據從數據源向目標數據倉庫轉化的過程,是實施數據倉庫的重要步驟。如果說數據倉庫的模型設計是一座大廈的設計藍圖,數據是磚瓦的話,那麼ETL就是建設大廈的過程。在整個項目中最難部分是用戶需求分析和模型設計,而ETL規則設計和實施則是工作量最大的,約佔整個項目的60%~80%,這是國內外從衆多實踐中得到的普遍共識。
ETL是數據抽取(Extract)、清洗(Cleaning)、轉換(Transform)、裝載(Load)的過程。是構建數據倉庫的重要一環,用戶從數據源抽取出所需的數據,經過數據清洗,最終按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中去。
於是,企業如何通過各種技術手段,並把數據轉換爲信息、知識,已經成了提高其核心競爭力的主要瓶頸。而ETL則是主要的一個技術手段。

做數據倉庫系統,ETL是關鍵的一環。說大了,ETL是數據整合解決方案,說小了,就是倒數據的工具。

現在來說說ETL技術用到的工具,常用的有Informatica、Datastage、Beeload、Kettle等。目前只用過kettle,所以這裏只對kettle做描述。

kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,kettle 3版本需要安裝 3以上都是綠色版無需安裝。


提醒的是kettle運行 需要機器有JRE環境


Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麼。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。


現在來看下kettle的transformation文件,一個最簡單的E過程例子(windows環境)


上圖文件的功能就是就是把oracle數據庫一個表的數據抽取到另一表裏面。


左邊的圖標叫表輸入 右邊的叫表輸出 中間綠色的線代表數據流向。 表輸入和表輸出可由左邊的菜單欄裏 鼠標拖動出。

雙擊打開表輸入是這樣的:


上圖左邊的是打開表輸入的界面 

步驟名稱: 即是圖標下面顯示的名字 可以隨便填

獲取sql查詢語句:點擊後 會樹狀形式展示oracle的表視圖 等 選中雙擊後 點自己會添加到空白的sql框內。

數據庫連接: 一開始沒有 需要新建 有了就可以編輯了 點擊編輯後會彈出上圖右邊的頁面

connection name :連接起個名字 可以使數據ip地址 加實例名

connection type :是選擇你要查詢的數據庫類型 mysql oracle等等

method access:是選擇驅動類型 選擇那個JDBC就可以了

server host name :是數據庫的ip地址 

dbname :是數據庫實例名 

Port number:是端口號 

再下面就是用戶名 密碼了。


填好所有的信息後 可以點擊test測試下能不能成功連接。成功連接即可點擊確定 界面就會回到上面的左圖


sql 下面的空框 是用來寫你想要獲取數據的sql語句(也可以由那個獲取查詢sql按鈕自動獲取) 寫好後 可以點擊預覽 (行數選少點)看下數據可正常。如果能預覽數據 說明你的表輸入就配好了。

上圖左邊

ennable lazy conversion 勾上後就表示延遲轉換:這樣在從數據庫讀取的數據就能保持原有字符集,不會默認強制使用utf8。

replace variables in :表示如果sql框裏的sql有變量的時候 會使用環境變量替代它 像table_201407 這樣帶日期的固定格式表名 可以使用這個實現自動化

記錄數量限制:默認爲0 若設爲大於0的任何值 則無論sql怎麼寫的 輸入表只有設置的行數那麼多。


現在來看錶輸出:

上圖左邊爲雙擊打開表輸出的 界面。

步驟名稱:表輸出圖標下面顯示的名字 可用數據庫ip 用戶名 表名

數據庫連接 :沒有需要新建 可以新建幾個 新建好的可以編輯

target schema :目標表或者視圖的用戶

目標表:可以自己輸入,也可以從瀏覽裏面選擇

提交記錄數量:批量一次提交的數據量或者非批量插入數據量的限制值

裁剪表:插入之前 有 truncate 操作。

忽略插入錯誤 :這是非批量插入的功能,非批量插入時 若有一天數據插入報錯 後面的數據還可以正常插入。

使用批量插入:點上即是批量 否則爲非批量。

點擊數據庫連接的編輯後 會彈出上圖右圖 與表輸入的一樣 填寫數據庫的tns信息 及用戶名密碼。點擊test可以連接後 點擊確定


回到上圖左邊界面 再點擊確定 即配好了一個轉換 點擊運行後:

ETL技術入門之ETL初認識,數據倉庫


可以從日誌看 該轉換有沒有finished、 每個步驟的耗時、速度 、平均每秒多少行、 總共插入了多少記錄數等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章