メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base

Magic ETL v2 DataFlow最適化(ベータ)

Version 2

 

はじめに

Magic ETL DataFlowの最適化とは、Magic ETL v2で導入された新しいパフォーマンスの向上ツールです。各実行の開始時に、システムにより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にすべての行を強制的に読み込ませることで、最適化された実行が妨げられます。例えば、新しく追加された行が一意であるかどうかを確認するには、一意性を確認するために必要な比較の実行を行うために、実行中にすべての既存の行を読み込ませる必要があります。

自動最適化を妨げる[集計]タイルには以下が含まれます。

  • グループ化
  • ランクとウインドウ
  • 重複を削除
  • ピボット(列を展開)

ほとんどの場合、DataFlowの最適化は、これらのタイルを使用するDataFlowには適用できません。集計が結合の「lookup」側(外側以外)である場合は例外です。この場合、集計タイルへの入力が変更されない限り、結合が最適化される場合があります(以下を参照)。

結合

結合は、以下の条件を満たす場合に最適化されます。

  1. 結合の片側に入力が追加されても、反対側は同じ状態のままである場合。
  2. 変更されていない結合側(例:lookupテーブル)が結合の「外側」の部分ではない場合。

例えば、右側のテーブルのみが変更された場合、右の結合が最適化されることがあります。ほとんどの場合、内部結合は最適化されます。完全外部結合は最適化されることはありません。

合併

合併は、すべての入力に新しいデータが追加されたときに最適化される場合があります。入力が完全に置き換えられた場合、または最適化の対象から除外された場合(例:[現在の日付]関数の使用が[合併]ステップへの入力パスに沿って存在する場合)、合併からのすべての入力は完全に再読み取りされる必要があります。

[スクリプト]タイル

PythonまたはRスクリプトタイルを使用すると、この最適化は完全に無効になります。