2013年12月13日 星期五

Lab3:控制流程設計

若要使用 SSIS 來設計 ETL 執行工作, 首要目標就是決定使用何種 Task 來處理需求, 然後選擇適當的 Container 來優化效能。

底下例子練習,我們將練習如何由指定目錄中讀取 .csv 檔案, 並進行匯入到資料庫的操作。 如果執行成功,將檔案搬移到 data_success 目錄, 如果執行失敗,將檔案搬移到 data_failed 目錄。

設定 Connection

首先我們來設定「連接」,在這個練習中會用到幾個連接:讀取csv檔案的連接、將資料存入SQL的連接、還有將檔案搬移的連接。

建立 Flat File Connection

因為我們要讀取 .csv 檔,所以使用 Flat File Connection

編輯連接的內容:

切換到資料行頁簽,設定資料列:

建立 OLE DB Connection

因為我們要將資料轉移至資料庫,所以要建立一個 OLE DB Connection

建立 File Connection

因為如果執行成功,要將檔案搬移到 data_success 目錄;執行失敗,要將檔案搬移到 data_failed 目錄。 所以,我們需要建立二個「檔案連接」,連接到指定目錄。

完成後,你可以看到我們總共建立了四個連接管理員:

設定 Control Flow

加入 Foreach 迴圈容器

由於要處理指定目錄中的所有檔案,所以我們必須在 Control Flow 中先加入一個「Foreach 迴圈容器」。

並設定其內容如下:

設定「變數對應」(Viriable Mapping)

這個迴圈容器會列舉目錄中的所有檔案,所以我們必須設定一個變數,讓它可以將檔案名稱傳送給要處理的Task。

將連線管理員改為動態取得檔案

在先前,我們建立一個「Flat File Connection」,它原本是讀取固定的檔案,現在我們要將它與「 Foreach 迴圈容器」建立關連。 也就是這個連線所連接的檔案,實際上會由迴圈容器動態提供。

設定 Connection 的 Expressions 屬性:

設定 ConnectionString 屬性,輸入:「@[User::inputFileName]

這個變數名稱就是在「 Foreach 迴圈容器」中建立的變數名稱。

設定 Data Flow

上面步驟完成後,「Foreach 迴圈容器」會列舉所有檔案,「Flat File Connection」會取得每一個檔案名稱,結束。 嗯,好像正事還沒辦...。 接下來就是 Data Flow 的事情,也就是設定資料要如何處理。 Data Flow 可以做的事情相當多,所以擺放在下一個練習,在這個練習中,我們只簡單的執行匯入動作。

加入 Data Flow Task

加入一個「Data Flow Task」到「Foreach 迴圈容器」裡.

設定 Data Flow Task 執行內容

1.切換到「資料流程」頁簽,由於我們要讀取csv檔,然後匯入SQL Server,所以在這個工作中,我們要加入一個「一般檔案來源」和「OLE DB 目的地」元件:

2.在二個元件中間建立「資料流路徑」。

3.編輯「一般檔案來源」,確認其連接管理員的設定值。

4.設定「OLE DB 目的地」,確認其連接管理員的設定值。

5.設定完成後,你可以開啟編輯「OLE DB 目的地」,查看csv和table欄位的對應。

加入 File System Task

完成以上步驟,我們可以得到:

  1. 由「Foreach 迴圈容器」取得所有檔案。
  2. 在「資料流程工作」將檔案轉入目的資料庫。

接下來要做的就是將處理後的檔案移到指定目的。

加入 File System Task

我們加入二個「File System Task」,若「資料流程工作」執行成功則執行「檔案系統工作 1」,若「資料流程工作」執行失敗則執行「檔案系統工作 2」

編輯「檔案系統工作 1」。

  • 來源
    • IsSourcePathVariable:設定來源是否由變數取得。
    • SourceVariable:由哪一個變數,選擇上面我們自訂的那個變數。
  • 目的
    • IsDestinationPathVariable:設定目的地是否由變數取得。
    • DestinationConnection:指定使用固定的連線 data_success。
    • OverwriteDestination:是否覆蓋目的地的檔案。
  • 作業
    • Operation:選擇「移動檔案」。

編輯「檔案系統工作 2」。

依上一步驟設定即可。

執行封裝

Prepare and Verify SSIS Package Execution

Now that you have configured the File System task in Exercise 2 to have the ConnectionString property assigned dynamically, it should display an error; it cannot validate the source file connection because the inputFileName variable has not been assigned.

Right-click the File System task and select Properties from the shortcut menu. Find the DelayValidation property in the property grid and change its value to True. This will disable design-time validation, and the variable will only be validated at run time.

Run the SSIS package in debug mode

執行結束之後,正確的csv檔將被匯入資料,同時搬移至success目錄;不正確的csv檔將不被匯入,同時搬移至failed目錄。

沒有留言:

張貼留言