程式碼高𠅙

2013/12/16

ETL 概念、應用及工具簡介

企業裡面常有資料處理、轉換或整合的需求。好的資料管理工具雖然不一定能讓你上天堂,不好的工具卻肯定會讓你住病房。「ETL 資料轉換作業」是「資料管理」中最基礎的應用,本篇就來說說 ETL 的基本概念,它有何應用,以及市場上常見的工具。

ETL 是什麼

  • ETL 代表資料由資料來源端擷取 (Extract) 出來,經過轉換 (Transform),再載入 (Load)到目的端的資料傳輸過程。
  • Extract -- 從各種不同的資料來源中,將資料擷取出來。傳統上資料來源是來自於交易型資料庫。
  • Transform -- 對資料進行適當的轉換,如型態轉換、字串相連、彙總運算等等。這個步驟在 ETL 中不一定要執行。
  •  Load -- 將資料載入目的端;目的端通常是為了報表產製及商業智慧分析而最佳化的資料倉儲。


 

 ETL 的應用情境

  • 同步不同資料庫的資料。
  • 資料清理,移除錯誤資料。
  • 將資料載入資料倉儲以便後續分析, 如進行 OLAP 或 Data Mining 之應用。

 

使用 ETL 工具的優勢

使用 ETL 工具最大的優勢,在於可把傳統上需要透過手工方式開發的資料轉換程式碼,轉為由 ETL 工具去進行設定或設計,如此可大量減低資料轉換作業的建置時間及成本。

目前大部分開發人員還是使用自行開發的指令,來處理資料的整合作業。要透過這種方式來建立商業智慧系統,需要開發人員需具備一定的專業能力,還要費時費力的進行開發及除錯。

對於資料庫管理人員而言,若不使用外部工具,要連通不同種類的資料來源並不簡單。況且一旦外部資料來源改變,或者要加入新的資料來源,那這種勞心勞力自行開發的工作又要整個重來一次。使用 ETL 工具,將能簡化這種繁複瑣碎的工作。而良好的資料轉換流程之圖形介面設計工具,甚至可將這類操作變成樂趣。

 

ETL 工具簡介

以下來說說一些業界比較常用的 ETL 工具:

Informatica PowerCenter

  • Informatica 公司所提供的同名商業化套裝資料整合軟體。
  • 建立於 1993 年,主要業務即為資料整合。
  • 依據 Gartner Dataquest 的報告,它在資料整合領域具有最高的市占率。
  • 它提供了大量的套件供企業進行系統整合,並能連接到大量的新一代或既有的資料來源。
  • 提供良好的作業設計及監控介面,功能強大,但人員必須經過訓練才能上手。
  • 單價昂貴,顧問服務費用高。
  • 無縫整合著名的「下推優化」ELT 方法,使用資料庫的服務資源來進行資料轉換作業,效能優良,可以應用於大規模的系統。

    Pentaho Kettle (PDI)

    • Pentaho 是一家商業化的公司,約始於 2001 年,他們基於 Java 開發了一套開源 BI 套件,使用者社群人數眾多。 其中包含了一個 ETL 軟體,稱為 Kettle (或稱為 Pentaho Data Integration/PDI)。
    • 透過中介資料趨動 (metadata-driven) 的方式來設計資料轉換流程,而其使用介面功能完善且易於操作。不需像 Informatica 那樣大的前期投入。
    • 其作業設計及轉換使用了兩種腳本文件:Transformation 和 Job。Transformation 進行資料的轉換作業,以 Javascript 撰寫,Job 則用來控制整個作業流程。
    • 具有作業分派的功能 (需要一個像 cron 的分派器),可以透過分散式部署建立 Pentaho 群集,並能運行部署在 slave servers 上的遠程任務。
    • 擁有資料品質管理功能,可以撰寫自定義的 SQL 查詢,Javascript,和正則表達式。 
    • 從 4.3 版開始,改採 Apache 授權。參考 Pentaho changes ETL license for big data push -- Kettle 4.3, available under the Apache License Version 2.0, can ingest, output, manipulate and report on data from Apache Cassandra, Hadoop HDFS, Hadoop MapReduce, Apache Hive, Apache HBase, MongoDB and Hadapt’s Adaptive Analytical Platform.

    Talend

    • Talend 是一個開源碼的資料整合軟體, 大概啟始於 2006 年 10 月。
    • 採用程式碼產生器的方式來建立資料轉換作業,它將產生的 Java 或 Perl 程式碼佈署於伺服器執行。
    • 其 GUI 操作介面是建立在 Eclipse RCP 平台之上。
    • 使用者社群人數沒有 Pentaho 多,但在國外有許多商業公司進行支援。像著名的 Jaspersoft (Jasper Report 開發者) ETL 工具就是採用 Talend ETL。

    Trinity

    • Netpro 公司所出產的商業化資料管理整合軟體。
    • 包含 Data Management (即 ETL)、JCS (作業控制系統,用來排程及分派作業),以及 Metadata (管理資料源與資料轉換作業會用到的資料庫、資料表及欄位資訊) 三個部分。
    • 其最新版支援 BigData Management, 能連接到 Hadoop HDFS, Hbase 等 BigData 資料儲存體,亦能執行 Pig 與 HiveQL 操作。
    • 提供以 Web 為基礎的操作介面,資料流程設計工具及作業執行監控工具都能透過 Java Web Start 即時自網頁上即時啟動,整體配套措施相當完善。
    • 採分散式多 Agent 架構,可以簡易的 scale-out.
    • 還包含 Data Profile, Impact Analysis, Data Protection 等各種資料管理軟體,實用性相當高。

    2013/02/06

    在 2011 年版的 Mac Mini 上啟動 Linux Mint 的無線網路卡

    首先執行底下指令,確認自己的無線網路卡是 Broadcom 網路卡:

    inxi -N

    其輸出應類似如下,若不是,請另尋它法:

    Network:   Card-1: Broadcom BCM4331 802.11a/b/g/n driver: bcma-pci-bridge 
               Card-2: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe driver: tg3
    

    1. 打開 Synaptic 套件管理員,在快速過濾的地方輸入 b43。
    2. 將 firmware-b43-installer 及 b43-fwcutter 標記為安裝,如下圖所示。
    3. 安裝完成後重新啟動系統,就能正常抓到 Wifi 無線網路了!

    2013/01/20

    Windows 8 遠端桌面連線多重登入 + Linux Client


    筆者目前在家中的使用的桌機是裝在二手 Mac-Mini 上的 Linux Mint, 雖然這台機器也有 i5 + 8G RAM, 但若想在裡面裝上五、六個 VM 跑 Hadoop, 終究也是力有未逮。

    不過家裡還有另一台硬體配備還算不差的 Windows 8 電腦 (i7-3770 CPU + 32G RAM),這台電腦本是看影片的專用機,但這樣的效能等級拿來看影片簡直是暴殄天物,便動腦筋想要充分運用這台 i7 的效能。

    希望效果

    希望達到的效果是,筆者還是使用 Linux Mint 作為主機,但透過 Windows 遠端桌面連線連到 Windows 8, 而且 Windows 8 的使用者要能 "無感" 於別人正在操作其電腦。要達到這樣的效果,必須達成兩件事:
    1. 必須讓 Windows 8 專業版可以支援遠端桌面連線多重登入。
    2. 讓 Linux Mint 可以透過 Windows 遠端桌面連線連到 Windows 8。

    讓 Windows 8 專業版可以支援遠端桌面連線多重登入

    要讓遠端電腦可以透過遠端桌面連線連到本機,得先在控制台->系統之中,開啟遠端桌面連線之設定,如 "如何開啟 Windows 8 遠端桌面連線?" 所述。 這裡有個重點,要把 "僅允許來自執行含有網路層級驗證之遠端桌面的電腦進行連線" 這個 checkbox 取消勾選,才能從 Linux 上連入 Windows 8.

    在 Google 上查詢 "Windows 遠端桌面連線多重登入", 大部分查到的資訊都是 Universal Termsrv.dll Patch 這個方式 (如 允許遠端桌面多重登入 解除遠端桌面連線多用戶同時連線的限制)。比較可惜的是,這個方式筆者試了一下,在 Windows 8 底下是不 work 的。

    在 Google 大神幫助下,找到了一個 Windows 8 Patcher 的方案,只要下載 Windows 8 Patcher.exe,並以管理員身份執行,重開機之後,便能達到以不同帳號遠端登入,而不會中斷現有使用者之操作之效果。

    在 Linux 底下透過遠端桌面連線連到 Windows 8


    這也是靠 Google 大神查來的,透過 rdesktop 這套軟體即能達到這個功能。安裝方式,如 "Linux下好用的遠端桌面連線程式:rdesktop" 所述,筆者節錄重點如下:

    安裝方式


    在命令列下執行:
    sudo apt-get install rdesktop

    執行方式

    rdesktop [IP]

    特別參數說明

    只要在命令列下達 rdesktop 不加任何參數,就會出現其參數說明:

    rdesktop: A Remote Desktop Protocol client.
    Version 1.7.1. Copyright (C) 1999-2011 Matthew Chapman et al.
    See http://www.rdesktop.org/ for more information.

    Usage: rdesktop [options] server[:port]
       -u: user name
       -d: domain
       -s: shell
       …
    筆者在命令列裡面是這樣下的:
    rdesktop -d WINDOWS主機名稱 -u 使用者名稱 -p - -r sound -f WINDOWS主機IP
    其中參數說明如下:
    • -u: 使用者名稱
    • -d: 使用者帳號的 domain,如果不加 -d 參數,則預設會以 MicrosoftAccount 做為登入 domain;MicrosoftAccount 其實就是 MSN 註冊帳號
    • -p: 密碼 (- to prompt)
    • -g: 視窗大小 (寬x高)
    • -f: 全螢幕模式,這個參數不能與 -g 同時使用
    • -r: 重定向遠端的特定功能,sound 代表要把遠端桌面的聲音重導回本機

    實際效果

    最後來看看實際的效果,筆者就在 Linux Mint 透過以上命令列連上 Windows 8. 在 Windows 8 中瀏覽 Youtube 網站,試試聲音重導的效果。

    哇哈哈,聲音真的跑到本機上來了。而令人感動的是,Windows 8 那台機器的主人還在看後宮甄嬛傳,影像跟聲音一切正常,完全感覺不到,筆者正在背景裡看 Youtube!



    對了,現在 Windows 8 遠端桌面連線是在全螢幕模式,該怎麼退出或切換到 Linux 上的其他視窗呢? 原來只要按下 Ctrl + Alt + Enter,就能離開全螢幕模式。

    呃… 是誰說要在裡面裝上五、六個 VM 跑 Hadoop,怎麼這會兒看起 Youtube 了… XD