Share via


資料流程工作

更新: 2006 年 7 月 17 日

資料流程工作會封裝在來源與目的地之間移動資料的資料流程引擎,並讓使用者在資料移動時轉換、清除及修改資料。將資料流程工作加入封裝控制流程,使得封裝擷取、轉換和載入資料成為可能。

資料流程至少要包含一個資料流程元件,但通常資料流程是一組連接的資料流程元件:擷取資料的來源;修改、路由或摘要資料的轉換;載入資料的目的地。元件在資料流程中透過路徑連接。每個路徑指定兩個元件,分別為路徑的開始與結束。如需詳細資訊,請參閱<資料流程元素>。

在執行階段,資料流程工作會從資料流程建立執行計劃,而資料流程引擎會執行該計劃。您可以建立不具有資料流程的資料流程工作,但只有在至少含有一個資料流程時才會執行該工作。

下圖顯示具有一個資料流程的資料流程工作。

資料流程

資料流程工作可包含多個資料流程。如果工作複製數個資料集,且不需要特別考慮複製資料的順序,則在資料流程工作中包含多個資料流程會更方便。例如,您可以建立五個資料流程,每個資料流程都可將資料從一般檔案複製到資料倉儲星狀結構描述中的其他維度資料表。

但是,當一個資料流程工作中存在多個資料流程時,資料流程引擎會決定執行順序。因此,當必須考慮順序時,封裝應使用多個資料流程工作,且每個工作包含一個資料流程。然後,您可以套用優先順序條件約束,以控制工作的執行順序。

下圖顯示具有多個資料流程的資料流程工作。

資料流程

封裝可以包含多個資料流程工作,複雜的封裝通常如此處理。例如,如果封裝需要資料流程以指定順序執行,或需要在資料流程之間執行其他工作,則您必須對每個資料流程使用個別的資料流程工作。

資料流程工作也管理錯誤流程。在執行階段,當資料流程元件轉換資料、執行查閱或評估運算式時,可能會發生資料列層級錯誤。例如,具有字串值的資料行無法轉換成整數,或運算式嘗試除以零。這兩個作業都會導致錯誤,但可以使用錯誤流程分別處理包含錯誤的資料列。如需有關如何在封裝資料流程中使用錯誤流程的詳細資訊,請參閱<處理資料中的錯誤>。

若要從文字檔將資料大量插入 SQL Server 資料庫,您可以使用「大量插入」工作取代資料流程工作和資料流程。但是,「大量插入」工作無法轉換資料。如需詳細資訊,請參閱<大量插入工作>。

搭配資料流程元素使用屬性運算式

某些資料流程元件 (來源、轉換和目的地) 支援在它們的某些屬性中使用屬性運算式。屬性運算式是在封裝載入時取代屬性值的運算式。在執行階段,封裝會使用更新的屬性值。這些運算式是以 Integration Services 運算式語法所建置,而且可以包含 Integration Services 函數、運算子、識別碼和變數。如需詳細資訊,請參閱<Integration Services 運算式參考>、<在封裝中使用運算式>和<在封裝中使用屬性運算式>。

如果在 Business Intelligence Development Studio 中建構封裝,任何支援屬性運算式之資料流程元件的屬性便會在其所屬的資料流程工作上公開。若要加入、變更及移除資料流程元件的屬性運算式,請按一下資料流程工作,然後使用 [屬性] 視窗或工作編輯器加入、變更或刪除屬性運算式。資料流程工作本身的屬性運算式是在 [屬性] 視窗中進行管理。

如果資料流程包含使用運算式的任何元件,[屬性] 視窗中也會公開運算式。若要檢視運算式,請選取元件所屬的資料流程工作。您可以依類別或是以字母順序檢視屬性。如果您在 [屬性] 視窗中使用分類檢視,任何沒有在特定屬性中使用的運算式都會列在 [其他] 類別中。如果您使用按照字母順序的檢視,就會以資料流程元件的名稱順序列出運算式。

記錄項目

Integration Services 提供一組可用於所有工作的記錄事件。此外,Integration Services 還為許多工作提供自訂記錄項目。如需詳細資訊,請參閱<在封裝中實作記錄>和<自訂訊息以進行記錄>。資料流程工作包含下列自訂記錄項目:

記錄項目 描述

BufferSizeTuning

指出資料流程工作已經變更緩衝區的大小。記錄項目會描述大小變更的原因,並列出暫存的新緩衝區大小。

OnPipelinePostEndOfRowset

表示已經為元件指定了資料列集結尾信號,此信號是由 ProcessInput 方法的最後一次呼叫所設定。處理輸入之資料流程中的每個元件都會寫入一個項目。項目中包含元件的名稱。

OnPipelinePostPrimeOutput

指出元件已經完成 PrimeOutput 方法的最後一次呼叫。根據資料流程而定,可能會寫入多個記錄項目。如果元件是來源,這個記錄項目則表示元件已經完成資料列的處理。

OnPipelinePreEndOfRowset

指出元件即將接收其資料列集結尾信號,此信號是由 ProcessInput 方法的最後一次呼叫所設定。處理輸入之資料流程中的每個元件都會寫入一個項目。項目中包含元件的名稱。

OnPipelinePrePrimeOutput

指出元件即將從 PrimeOutput 方法接收其呼叫。根據資料流程而定,可能會寫入多個記錄項目。

OnPipelineRowsSent

報告由 ProcessInput 方法之呼叫提供給元件輸入的資料列數目。記錄項目會包含元件名稱。

PipelineBufferLeak

提供在緩衝區管理員停止之後使緩衝區保持運作之任何元件的相關資訊。如果緩衝區仍然在作用中,就不會釋放緩衝區資源,並可能造成記憶體遺漏的問題。記錄項目會提供元件的名稱和緩衝區的識別碼。

PipelineExecutionPlan

報告資料流程的執行計劃。執行計劃提供有關如何將緩衝區傳送至元件的資訊,這項資訊會結合 PipelineExecutionTrees 記錄項目,以描述資料流程工作內所發生的情況。

PipelineExecutionTrees

報告資料流程中的配置執行樹狀目錄。資料流程引擎的排程器會使用這些樹狀目錄來建立資料流程的執行計劃。

PipelineInitialization

提供有關工作的初始化資訊。這項資訊包括作為 BLOB 資料暫存儲存位置使用的目錄、預設緩衝區大小,以及緩衝區中的資料列數目。根據資料流程工作的組態而定,可能會寫入多個記錄項目。

這些記錄項目會提供每次您執行封裝時許多有關資料流程工作執行的資訊。當您重複執行封裝時,所擷取的資訊會隨著時間累積,而提供工作執行之處理、可能會影響效能之問題、以及工作處理之資料量等重要的歷程記錄資訊。

來自資料流程工作的範例訊息

下表為非常簡單的封裝列出了記錄項目的範例訊息。該封裝會使用 OLE DB 來源擷取資料表的資料、使用「排序」轉換來排序資料,以及使用 OLE DB 目的地將資料寫入不同的資料表。

記錄項目 訊息

BufferSizeTuning

緩衝區類型 0 的資料列可能造成緩衝區大小大於配置的最大值。這種類型的緩衝區中只能有 9637 個資料列。

緩衝區類型 2 的資料列可能造成緩衝區大小大於配置的最大值。這種類型的緩衝區裡將只有 9497 個資料列。

緩衝區類型 3 的資料列可能造成緩衝區大小大於配置的最大值。這種類型的緩衝區裡將只有 9497 個資料列。

OnPipelinePostEndOfRowset

將會給予元件資料列集結束訊號。: 1180 : 排序 : 1181 : 排序輸入

將會給予元件資料列集結束訊號。: 1291 : OLE DB 目的地 : 1304 : OLE DB 目的地輸入

OnPipelinePostPrimeOutput

元件已經從其 PrimeOutput 呼叫返回。: 1180 : 排序

元件已經從其 PrimeOutput 呼叫返回。: 1 : OLE DB 來源

OnPipelinePreEndOfRowset

一個元件已處理完其所有的資料列。: 1180 : 排序 : 1181 : 排序輸入

一個元件已處理完其所有的資料列。: 1291 : OLE DB 目的地 : 1304 : OLE DB 目的地輸入

OnPipelinePrePrimeOutput

將會在一個元件上呼叫 PrimeOutput。: 1180 : 排序

將會在一個元件上呼叫 PrimeOutput。: 1 : OLE DB 來源

OnPipelineRowsSent

資料列是提供給資料流程元件作為輸入。: : 1185 : OLE DB 來源輸出 : 1180 : 排序 : 1181 : 排序輸入 : 76

資料列是提供給資料流程元件作為輸入。: : 1308 : 排序輸出 : 1291 : OLE DB 目的地 : 1304 : OLE DB 目的地輸入 : 76

PipelineExecutionPlan

SourceThread0

磁碟機: 1

影響: 1180 1291

輸出工作清單

輸出識別碼 11 的類型 1 的 CreatePrimeBuffer。

SetBufferListener: 輸入識別碼 1181 的 "WorkThread0"

輸出識別碼 12 的類型 3 的 CreatePrimeBuffer。

「OLE DB 來源」(1) 元件上的 CallPrimeOutput

結束輸出工作清單

SourceThread0 結束

WorkThread0

磁碟機: 1180

影響: 1180 1291

輸入工作清單,輸入識別碼 1181 (必須是 1 EOR)

「排序」(1180) 元件上用來檢視類型 2 輸入識別碼 1181 上的 CallProcessInput

結束輸入 1181 的輸入工作清單

輸出工作清單

輸出識別碼 1182 的類型 4 的 CreatePrimeBuffer。

SetBufferListener: 輸入識別碼 1304 的 "WorkThread1"

「排序」(1180) 元件上的 CallPrimeOutput

結束輸出工作清單

WorkThread0 結束

WorkThread1

磁碟機: 1291

影響: 1291

輸入工作清單,輸入識別碼 1304 (必須是 1 EOR)

「OLE DB 目的地」(1291) 元件上用來檢視類型 5 輸入識別碼 1304 上的 CallProcessInput

結束輸入 1304 的輸入工作清單

輸出工作清單

結束輸出工作清單

WorkThread1 結束

PipelineExecutionTrees

開始執行樹狀目錄 0

輸出「OLE DB 來源輸出」(11)

輸入「排序輸入」(1181)

結束執行樹狀目錄 0

開始執行樹狀目錄 1

輸出「OLE DB 來源錯誤輸出」(12)

結束執行樹狀目錄 1

開始執行樹狀目錄 2

輸出「排序輸出」(1182)

輸入「OLE DB 目的地輸入」(1304)

輸出「OLE DB 目的地錯誤輸出」(1305)

結束執行樹狀目錄 2

PipelineInitialization

未提供暫存 BLOB 資料儲存位置。緩衝區管理員將考慮 TEMP 和 TMP 環境變數中的目錄。

預設緩衝區大小為 10485760 個位元組。

緩衝區預設會有 10000 個資料列。

資料流程不會移除未使用的元件,因為 RunInOptimizedMode 屬性設定為 False。

許多記錄事件會寫入多個項目,並且有些記錄項目的訊息包含複雜的資料。若要更容易瞭解和溝通複雜訊息的內容,您可以剖析訊息文字。視記錄的位置而定,您可以使用 Transact-SQL 陳述式或指令碼元件,將複雜的文字區分成資料行或其他更有用的格式。

例如,下表包含剖析成資料行的訊息:「資料列是提供給資料流程元件做為輸入。: : 1185 : OLE DB 來源輸出 : 1180 : 排序 : 1181 : 排序輸入 : 76」。這個訊息是在資料列從 OLE DB 來源傳送到「排序」轉換時,由 OnPipelineRowsSent 事件寫入。

資料行 描述

PathID

OLE DB 來源和「排序」轉換之間路徑的 ID 屬性的值。

1185

PathName

路徑之 Name 屬性的值。

OLE DB 來源輸出

ComponentID

「排序」轉換之 ID 屬性的值。

1180

ComponentName

「排序」轉換之 Name 屬性的值。

排序

InputID

「排序」轉換之輸入的 ID 屬性的值。

1181

InputName

「排序」轉換之輸入的 Name 屬性的值。

排序輸入

RowsSent

已傳送至「排序」轉換之輸入的資料列數目。

76

來源

下列來源擁有可由屬性運算式進行更新的屬性。

如需詳細資訊,請參閱<Source Custom Properties>。

轉換

下列轉換擁有可由屬性運算式進行更新的屬性。

如需詳細資訊,請參閱<Transformation Custom Properties>。

目的地

下列目的地擁有可由屬性運算式進行更新的屬性。

如需詳細資訊,請參閱<Destination Custom Properties>。

設定資料流程工作

您可以在 [屬性] 視窗中或以程式設計方式設定屬性。

如需有關如何在 [屬性] 視窗中設定這些屬性的詳細資訊,請按下列主題:

以程式設計方式設定資料流程工作

如需有關以程式設計方式將資料流程工作加入封裝,並設定資料流程屬性的詳細資訊,請按下列主題:

請參閱

概念

Integration Services 工作
建立封裝控制流程
建立封裝資料流程

其他資源

Adding the Data Flow Task Programmatically

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

變更的內容:
  • 更新自訂記錄項目的清單。

2006 年 4 月 14 日

變更的內容:
  • 新增有關資料流程工作可以寫入之記錄項目的資訊。

2005 年 12 月 5 日

變更的內容:
  • 新增有關使用屬性運算式的資訊。