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可以串連後 點擊確定
回到左邊介面 再點擊確定 即配好了一個轉換 點擊運行後:
可以從日誌看 該轉換有沒有finished、 每個步驟的耗時、速度 、平均每秒多少行、 總共插入了多少記錄數等