2013年12月15日 星期日

Control Flow

控制流程(Control Flow)是 SSIS package 中很重要的元素。 每一個 SSIS package 都會包含一個「控制流程」和數個「資料流程」構成的。

SSIS 中的「控制流程」,大至包含以下三種不同類型的元素:

  • 工作(Tasks):負責內容的執行。
  • 容器 (Containers):結構化封裝內容。
  • 優先順序條件約束(Precedence Constraints) Constraints:控管工作或容器的執行順序。

Planning a Complex Data Movement

資料轉移工作一般可分成簡單型和複雜型。 簡單型工作指的是單純的將資料由來源端搬移到目的地。 而複雜型工作通常在移轉前必須先經過一些轉換處理的步驟。 一般來說,轉換處理步驟中不外乎下面幾種狀況:

  • Data cleansing
  • Data normalization
  • Data type conversion
  • Data translation
  • Data validation
  • Data calculation and data aggregation
  • Data pivoting and data unpivoting

工作(Tasks)

「工作」是用來定義封裝控制流程中所要執行的工作單位,每個「工作」裡面則包含著數個真正要執行的作業。 例如你可以在 Control Flow 中加入一個「執行 SQL 工作」,然後透過它的編輯功能,設定連線內容以及要執行的SQL命令。 如果封裝包含超過一項「工作」,則「工作」會在控制流程中按照「優先順序條件約束」連接依序執行。

當設計 SSIS 封裝的控制流程時,SSDT 提供許多好用的【Tasks】元件,每個【Tasks】元件都表示不同性質的工作,根據工作的性質,Task 元件可分成以下幾種類別:

Data Preparation Tasks

這類工作,大都用來取得資料,準備做更進一步的處理工作。

Workflow Tasks

這類工作,大都是SSIS用來與外部程序(SQL Server之外的程序)進行互動的工作。

Data Movement Tasks

These tasks either participate in or facilitate data movements.

SQL Server Administration Tasks

SQL Server Maintenance Tasks

這類工作大都用來自動執行資料庫維護的工作。

Execute T-SQL Statement Task vs Execute SQL Task

這二者都是用來執行 SQL 指令,其中 Execute T-SQL Statement Task 使用較少記憶體,較少CPU,不過,就只能單純的對某個 T-SQL 送出執行,彈性非常差。 例如,參數化查詢、屬性運算式、將結果儲存到變數,這些功能都不支援,只能使用 Execute SQL Task 才行。

Analysis Services Tasks

These tasks create, alter, drop, and process Analysis Services objects as well as perform data retrieval operations.

The Script Task

Script Task 提供彈性的方法,讓你可以在封裝中,直接透過程式的方法,去執行你想要做的工作。 在程式中,你除了可以參考所有 .NET 內建的類別庫外,也可以參考你自訂的元件來協助開發。

Custom Tasks

容器(Containers)

Containers provide structure, encapsulation, and scope. Containers allow Tasks form a single unit to also behave as a single unit

SSIS 包含三種容器類型:

另外,在 MSDN 上還有提到一個 Task Host Container , 它其實就是最基本的容器,每個 Task 都被封裝在一個 Task Host Container 之中。

Foreach 迴圈容器

Foreach 迴圈容器」與語言中的 foreach 迴圈結構類似,都是使用「 Foreach 列舉值(foreach enumerator)」的概念。 SSIS 提供下列列舉值類型(enumerator type):

優先順序條件約束(Precedence Constraints)

Precedence Constraints
  • A precedence constraint links two executables: the precedence executable and the constrained executable.
  • define the Task's sequence
  • define when to stop the execution in case of failure and how to respond to such situations.

評估作業(evaluation operations)

Constraints 可以使用四種評估作業方式來控制流程。

  • 條件約束:依據 precedence executable 的執行結果來決定是否執行 constrained executable 。(這是預設選項)
  • 運算式:設定一個運算式做為評估,若值為 true,才執行 constrained executable 。
  • 運算式與條件約束:BJ4
  • 運算式或條件約束:BJ4

執行結果

當評估作業包含條約束時,針對 precedence executable 的執行結果,有三種類型:

  • 成功(success):若前一個作業有成功執行,才接續執行下一個作業。
  • 失敗(failure):若前一個作業失敗了,才接續執行下一個作業。
  • 完成(completion):不管前一個作業是成功或失敗,當完成後就接下一個作業。

平行處理

若有多項資料要處理時,如果這些資料是彼此獨立的,你就可以使用多個 Task 來平行處理。 如果這些資料必須考量到先後順序,你就可以使用優先順序條件約束來控管它們的執行順序。 例如下圖中的維度資料表:

若要轉移這些資料,你可以依下圖設計方式,讓 DimCurrency DimAccount DimScenario 可以先同時處理,接著再依序處理 DimOrganization 和 FactFinance。

多個優先順序條件約束

你也可以同時使用多個條件約束來組裝較複雜的案例,然後透過 LogicalAnd 屬性設定每一個條件約束的必要性。

例如下面這個例子,三個條件約束的 LogicalAnd 屬性都定為 And 關連性,所以,工作 A 必須成功執行、工作 B 必須失敗,而且工作 C 必須成功執行,才可以執行工作 D。

沒有留言:

張貼留言