1. 程式人生 > >ETL技術入門之ETL初認識,資料倉庫

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、 每個步驟的耗時、速度 、平均每秒多少行、 總共插入了多少記錄數等