データ フロー タスク
データ フロー タスクは、変換元と変換先との間でデータを移動するデータ フロー エンジンをカプセル化して、データの移動時にユーザーがデータを変換、クリーンアップ、および変更できるようにします。データ フロー タスクをパッケージの制御フローに追加すると、パッケージでデータの抽出、変換、および読み込みを行うことができます。
データ フローは 1 つ以上のデータ フロー コンポーネントで構成されますが、通常は、データを抽出する変換元、データを変更、ルーティング、または集約する変換、およびデータを読み込む変換先のデータ フロー コンポーネントが連結されてセットになっています。コンポーネントは、データ フロー内でパスによって連結されます。各パスは、パスの開始と終了となる 2 つのコンポーネントを指定します。詳細については、「データ フロー要素」を参照してください。
実行時に、データ フロー タスクはデータ フローから実行プランを作成し、データ フロー エンジンはそのプランを実行します。データ フローを含まないデータ フロー タスクも作成できますが、データ フロー タスクは少なくとも 1 つのデータ フローを含む場合にのみ実行されます。
次の図は、1 つのデータ フローが含まれるデータ フロー タスクを示しています。
データ フロー タスクには、複数のデータ フローを含めることができます。タスクが複数のデータのセットをコピーする場合で、データのコピー順序が重要でない場合は、データ フロー タスクにデータ フローを複数含める方が便利です。たとえば、5 つのデータ フローを作成し、各データ フローで、フラット ファイルからデータ ウェアハウスのスター スキーマ内のそれぞれ別のディメンション テーブルにデータをコピーできます。
ただし、1 つのデータ フロー タスク内に複数のデータ フローが含まれる場合、実行順序はデータ フロー エンジンによって決定されます。したがって、順序が重要である場合、パッケージは複数のデータ フロー タスクを使用して、各タスクにつきデータ フローを 1 つずつ含める必要があります。次に、優先順位制約を適用して、タスクの実行順序を制御できます。
次の図は、複数のデータ フローが含まれるデータ フロー タスクを示しています。
パッケージには複数のデータ フロー タスクを含めることができます。複雑なパッケージでは頻繁にこの方法がとられますが、たとえば、パッケージで、特定の順序でデータ フローを実行する必要がある場合、またはデータ フロー間で別のタスクを実行する必要がある場合は、データ フローごとに異なるデータ フロー タスクを使用する必要があります。
データ フロー タスクは、エラー フローを管理することもできます。データ フロー コンポーネントがデータを変換したり、参照を実行したり、または式を評価する際に、実行時に行レベルのエラーが発生する場合があります。たとえば、文字列値のデータ列が整数に変換できない場合、または式が 0 での除算を試行している場合などがあります。これらの操作の結果はいずれもエラーになり、エラーが含まれる行は、エラー フローを使用して別個に処理されます。パッケージのデータ フローでエラー フローを使用する方法については、「データ フローのエラー処理」を参照してください。
テキスト ファイルのデータを SQL Server データベースに一括挿入するには、データ フロー タスクとデータ フローの代わりに、一括挿入タスクを使用できます。ただし、一括挿入タスクではデータの変換はできません。詳細については、「一括挿入タスク」を参照してください。
データ フロー要素でのプロパティ式の使用
多くのデータ フロー コンポーネント (変換元、変換、および変換先) では、一部のプロパティでプロパティ式を使用できます。プロパティ式は、パッケージの読み込み時にプロパティの値を置き換える式です。実行時に、パッケージは更新されたプロパティ値を使用します。Integration Services 式構文を使用して式を作成し、その式に Integration Services の関数、演算子、識別子、および変数を含めることができます。詳細については、「Integration Services の式のリファレンス」、「パッケージでの式の使用」、および「パッケージでのプロパティ式の使用」を参照してください。
Business Intelligence Development Studio でパッケージを構築すると、プロパティ式をサポートするすべてのデータ フロー コンポーネントのプロパティが、そのデータ フロー コンポーネントが属するデータ フロー タスクに表示されます。データ フロー コンポーネントのプロパティ式を追加、変更、および削除するには、データ フロー タスクをクリックし、[プロパティ] ウィンドウまたはタスク用のエディターを使用してプロパティ式を追加、変更、または削除します。データ フロー タスク自体のプロパティ式は、[プロパティ] ウィンドウで管理します。
データ フローに式を使用するコンポーネントが含まれている場合は、該当する式も [プロパティ] ウィンドウに表示されます。式を表示するには、コンポーネントが属するデータ フロー タスクを選択します。プロパティは項目別またはアルファベット順に表示できます。[プロパティ] ウィンドウで項目別のビューを使用すると、特定のプロパティで使用されていないすべての式は [その他] カテゴリに一覧表示されます。アルファベット順のビューを使用すると、データ フロー コンポーネントの名前順に式が一覧表示されます。
ログ エントリ
Integration Services では、すべてのタスクで利用可能な一連のログ イベント、および多くのタスクで利用可能なカスタム ログ エントリを提供しています。詳細については、「パッケージへのログ機能の実装」および「ログ記録用のカスタム メッセージ」を参照してください。データ フロー タスクには、次のカスタム ログ エントリが含まれています。
ログ エントリ |
説明 |
---|---|
BufferSizeTuning |
データ フロー タスクでバッファーのサイズが変更されたことを示します。このログ エントリはサイズ変更の理由を説明し、一時的な新しいバッファー サイズを表示します。 |
OnPipelinePostEndOfRowset |
ProcessInput メソッドの最終呼び出しで設定される、行セットの終了シグナルがコンポーネントに通知されたことを示します。エントリは、データ フロー内で入力を処理するコンポーネントごとに書き込まれます。このエントリには、コンポーネント名が含まれます。 |
OnPipelinePostPrimeOutput |
コンポーネントが PrimeOutput メソッドの最終呼び出しを完了したことを示します。データ フローによっては、複数のログ エントリが書き込まれる場合があります。コンポーネントがソースの場合、このログ エントリは、コンポーネントが行の処理を完了したことを意味します。 |
OnPipelinePreEndOfRowset |
ProcessInput メソッドの最終呼び出しで設定される、行セットの終了シグナルがコンポーネントに通知されたことを示します。エントリは、データ フロー内で入力を処理するコンポーネントごとに書き込まれます。このエントリには、コンポーネント名が含まれます。 |
OnPipelinePrePrimeOutput |
コンポーネントに、PrimeOutput メソッドからの呼び出しが通知されたことを示します。データ フローによっては、複数のログ エントリが書き込まれる場合があります。 |
OnPipelineRowsSent |
ProcessInput メソッドの呼び出しによってコンポーネント入力に指定された行数を報告します。ログ エントリにはコンポーネント名が含まれます。 |
PipelineBufferLeak |
バッファー マネージャーの終了後もバッファーを保持しているコンポーネントに関する情報を提供します。バッファーが保持されたままの場合、バッファー リソースは解放されていないので、メモリ リークが発生する可能性があります。このログ エントリは、コンポーネントの名前とバッファーの ID を含みます。 |
PipelineComponentTime |
主要な 5 つの処理手順 (Validate、PreExecute、PostExecute、ProcessInput、および ProcessOutput) それぞれにおいてコンポーネントが費やした時間 (ミリ秒) を報告します。 |
PipelineExecutionPlan |
データ フローの実行プランを報告します。この実行プランでは、バッファーをコンポーネントに送信する方法に関する情報を提供します。この情報は、PipelineExecutionTrees ログ エントリと組み合わせて、データ フロー タスク内での実行内容を示します。 |
PipelineExecutionTrees |
データ フロー内のレイアウトの実行ツリーを報告します。データ フロー エンジンのスケジューラは、このツリーを使用して、データ フローの実行プランを構築します。 |
PipelineInitialization |
タスクに関する初期化情報を提供します。この情報には、BLOB データの一時的な保存に使用するディレクトリ、既定のバッファー サイズ、およびバッファー内の行数が含まれます。データ フロー タスクの構成によっては、複数のログ エントリが書き込まれる場合があります。 |
これらのログ エントリには、パッケージを実行するたびに、データ フロー タスクの実行に関する豊富な情報が記録されます。パッケージを繰り返し実行するうちに情報が蓄積され、タスクが実行する処理、パフォーマンスに影響する問題、タスクが処理するデータ量などに関する重要な履歴情報が得られます。
これらのログ エントリを使用してデータ フローのパフォーマンスを監視し、向上させる方法の詳細については、次のいずれかのトピックを参照してください。
データ フロー タスクからのサンプル メッセージ
次の表は、ごく単純なパッケージでのログ エントリのサンプル メッセージの一覧です。このパッケージは、OLE DB ソースを使用してテーブルからデータを抽出し、並べ替え変換を使用してデータを並べ替え、さらに OLE DB 変換先を使用してデータを別のテーブルに書き込みます。
ログ エントリ |
メッセージ |
---|---|
BufferSizeTuning |
バッファーの種類 0 内の行が、構成したバッファーの最大サイズよりも大きくなりました。この種類のバッファーに含まれる行は 9,637 行のみになります。 バッファーの種類 2 内の行が、構成したバッファーの最大サイズよりも大きくなりました。この種類のバッファーに含まれる行は 9,497 行のみになります。 バッファーの種類 3 内の行が、構成したバッファーの最大サイズよりも大きくなりました。この種類のバッファーに含まれる行は 9,497 行のみになります。 |
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 |
PipelineComponentTime |
コンポーネント "Calculate LineItemTotalCost" (3522) は ProcessInput に 356 ミリ秒要しました。 コンポーネント "Sum Quantity and LineItemTotalCost" (3619) は ProcessInput に 79 ミリ秒要しました。 コンポーネント "Calculate Average Cost" (3662) は ProcessInput に 16 ミリ秒要しました。 コンポーネント "Sort by ProductID" (3717) は ProcessInput に 125 ミリ秒要しました。 コンポーネント "Load Data" (3773) は ProcessInput に 0 ミリ秒要しました。 コンポーネント "Extract Data" (3869) は出力 "OLE DB ソースの出力" (3879) で PrimeOutput のバッファー入力に 688 ミリ秒要しました。 コンポーネント "Sum Quantity and LineItemTotalCost" (3619) は出力 "集計の出力 1" (3621) で PrimeOutput のバッファー入力に 141 ミリ秒要しました。 コンポーネント "Sort by ProductID" (3717) は出力 "並べ替えの出力" (3719) で PrimeOutput のバッファー入力に 16 ミリ秒要しました。 |
PipelineExecutionPlan |
SourceThread0 操作の対象: 1 影響: 1180 1291 出力作業一覧 出力 ID 11 に対する型 1 の CreatePrimeBuffer。 SetBufferListener: 入力 ID 1181 の "WorkThread0" 出力 ID 12 に対する型 3 の CreatePrimeBuffer。 コンポーネント "OLE DB ソース" (1) の CallPrimeOutput 出力作業終了一覧 SourceThread0 作業終了 WorkThread0 操作の対象: 1180 影響: 1180 1291 入力作業一覧、入力 ID 1181 (1 EOR が必要です) コンポーネント "並べ替え" (1180) にあるビューの種類 2 に対する入力 ID 1181 の CallProcessInput 入力 1181 に対する入力作業終了一覧 出力作業一覧 出力 ID 1182 に対する型 4 の CreatePrimeBuffer。 SetBufferListener: 入力 ID 1304 の "WorkThread1" コンポーネント "並べ替え" (1180) の CallPrimeOutput 出力作業終了一覧 WorkThread0 作業終了 WorkThread1 操作の対象: 1291 影響: 1291 入力作業一覧、入力 ID 1304 (1 EOR が必要です) コンポーネント "OLE DB 変換先" (1291) にあるビューの種類 5 に対する入力 ID 1304 の CallProcessInput 入力 1304 に対する入力作業終了一覧 出力作業一覧 出力作業終了一覧 WorkThread1 作業終了 |
PipelineExecutionTrees |
begin execution tree 0 output "OLE DB ソースの出力" (11) input "並べ替えの入力" (1181) end execution tree 0 begin execution tree 1 output "OLE DB ソースのエラー出力" (12) end execution tree 1 begin execution tree 2 output "並べ替えの出力" (1182) input "OLE DB 変換先の入力" (1304) output "OLE DB 変換先のエラー出力" (1305) end execution tree 2 |
PipelineInitialization |
BLOB データの一時的なストレージの場所が指定されませんでした。バッファー マネージャーにより、TEMP 環境変数および TMP 環境変数のディレクトリが検討されます。 既定のバッファー サイズは 10,485,760 バイトです。 既定では、バッファーには 10,000 行保持されます。 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 |
変換元
変換
次の変換には、プロパティ式で更新できるプロパティがあります。
詳細については、「変換のカスタム プロパティ」を参照してください。
変換先
次の変換先には、プロパティ式で更新できるプロパティがあります。
詳細については、「変換先のカスタム プロパティ」を参照してください。
データ フロー タスクの構成
プロパティを設定するには、[プロパティ] ウィンドウで行うか、またはプログラムによって設定します。
プロパティを [プロパティ] ウィンドウで設定する方法の詳細については、次のトピックを参照してください。
プログラムによるデータ フロー タスクの構成
プログラムによってデータ フロー タスクをパッケージに追加して、データ フローのプロパティを設定する方法の詳細については、次のトピックを参照してください。
|