はじめに
DataFlowの自動追加処理とは、Magic ETLで導入された新しいパフォーマンスの向上ツールです。各実行の開始時に、システムによりDataFlowの入力および出力の状態、DataFlowのアクションに対する変更点が確認されます。可能な場合は最後のDataFlowの実行以降に入力に追加された新しい行のみが新しい実行によって処理され、出力DataSetに追加されます。システムでは、データの整合性を確保するためにすべての行を再処理する必要がある状態について自動的に識別します。以下で詳しく説明します。理想的なケースでは、これらの最適化により実行時間が大幅に短縮されます。この記事では、データパイプラインでこの機能を最大限に活用する方法について説明します。
実行が最適化されたかどうかを確認する方法
各DataFlowの [履歴] タブで、 [成功] バッジにマウスポインターを合わせると、実行が最適化されたことを示すメッセージが表示されます。実行時間と行数により、DataFlowが最適化されていることが示される場合もあります。例えば、10,000行の入力DataSetに100行が追加されている場合、最適化された実行では処理された100行のみが表示される場合があります。一方で、最適化を適用できなかった実行では、処理された10,100行が表示されます。仕組み
DataFlowの実行は、既存の出力DataSetに新しい行を追加すると、最適化されていない実行とまったく同じデータになるとシステムで判定された場合にのみ、この方法で最適化されます。以下の動作により、DataFlowが最適化されなくなります。最適化できない状況を理解することにより、DataFlowの最適化を活用してお客様のデータパイプラインを合理化できるようにサポートしたいと考えています。現在の日付関数
現在の日付と時刻に依存するスクリプトまたはタイル設定では、接続されているすべての変換に対してこの最適化が無効になります。現在の日付と時刻は実行ごとに異なるため、既存の出力DataSetへの追加を一から再実行した場合と同じようにすることは不可能です。NOW()、TODAY()、CURDATE()などの関数、および[定数を追加]タイルと[行をフィルター]タイルで [現在の日付と時刻] オプションを使用すると、DataFlowの最適化が無効になります。 データ自体の日付/時刻フィールドが、現在のデータと時刻(例:_BATCH_LAST_RUN_)に対して代用できる場合は、代わりにそのフィールドを使用することで、DataFlowの最適化が有効になります。集計タイル
タイルは、データを行ごとに処理するのではなく、完全なセットとして処理するため、DataFlowにすべての行を強制的に読み込ませることで、最適化された実行が妨げられます。例えば、新しく追加された行が一意であるかどうかを確認するには、一意性を確認するために必要な比較の実行を行うために、実行中にすべての既存の行を読み込ませる必要があります。 自動最適化を妨げる集計タイルには以下が含まれます。- グループ化
- ランクとウインドウ
- 重複を削除
- ピボット(列を展開)
Join
Joinは、以下の条件を満たす場合に最適化されます。- Joinの片側に入力が追加されても、反対側は同じ状態のままである場合。
- 変更されていないJoin側(例:lookup表)がJoinの「外側」の部分ではない場合。