メインコンテンツへスキップ

はじめに

Magic ETLの出力DataSetタイルには、置き換え、追加、パーティション、Upsertの4つのDataSet更新方法があります。DataFlowの最適な更新方法は、ユースケースによって異なります。

更新方法

以下の表に、使用できる各方法の基本的な定義を示します。各方法の詳細については、リンク先を参照してください。 更新方法の詳細については、一般的な「 DataSet更新方法 」(Magic ETL以外の方法)の記事を参照してください。

項目

説明

置き換え

実行するたびに、出力DataSetの内容が最新の結果に置き換えられます。

追加

実行するたびに、その結果が出力DataSetに新しいバッチとして追加されます。

パーティション

実行するたびに、名前(特定の列の値)に従って行がバッチにグループ化されます。DataSet内の固有の各バッチ名は、パーティションと呼ばれます。これらのパーティションはすべてDataSetに追加され、名前が一致する既存のパーティションはすべて置き換えられます。

最終的に、パーティションフィルター式が指定されている場合、すべてのパーティションがその式に対して評価され、パスしなかったものは削除されます。

Upsert

実行するたびに、定義されたキー(DataSet内の一意な行を示す列または列の組み合わせからの値)を使用して、実行結果の行と出力DataSet内の行が比較されます。

出力DataSet内の既存の行と一致するキーを持つ行は、出力DataSet内で更新されます。
出力DataSet内にまだ存在しないキーを持つ行は、出力DataSetに追加されます。

置き換え

置き換えは、Magic ETLのデフォルトの更新方法です。これにより、DataSet内の既存のデータがすべて削除され、Magic ETL DataFlowの実行による新しいバッチデータに置き換えられます。この方法は、出力DataSetが比較的小さい場合や、DataFlowを実行するたびにすべてのデータを更新する必要がある場合に適しています。
Replace (1).gif
このページのトップへ

追加

追加では、Magic ETL DataFlowの実行に起因するすべてのデータを取得し、出力DataSetに追加します。この方法では、出力DataSet内の既存のデータを一切考慮しないため、重複の可能性を考慮することなしに新しいデータを追加します。追加は、DataFlowを実行するたびに、既存の出力DataSetに新しい行を追加する必要がある場合に適しています。ただし、この更新方法は脆弱であり、データが重複したり欠落したりする可能性があります。
Screenshot 2023-09-19 at 12.42.43 PM.png
このページのトップへ

パーティション

パーティションは、データをグループに整理して、データの更新をより迅速かつ効率的に行う方法です。以下の図は、データをパーティションに置き換えて追加する方法を示しています。
partition graphic.jpg

パーティションの基礎

パーティションについては、一般的に、物理的な百科事典(同じセットの一部でありながら個々の異なる巻を集めたもの)に例えて考えると理解しやすいでしょう。例えば、セット内の1巻が改版により再出版された場合、セット全体を取り替えるのではなく、改版された新しい巻だけを購入できます。パーティションは、データを別々のコレクション(サブセット)に分割します。これにより、一部のデータを置き換えるときに、すべてのデータを置き換える必要がなくなります。パーティションの使用時にデータを追加することは、百科事典の新しい巻を購入し、コレクションの最後に追加することに似ています。 Magic ETLでパーティションを定義する場合は、データを論理グループに分割できる列を特定または作成する必要があります。良い例として、トランザクションテーブルの日付列があります。列の各日付はパーティションを表し、各パーティションにはそのパーティション内の複数の行(トランザクション)が含まれます。 DataSetにパーティションが定義されると、新しいデータはパーティション列にもとづいて評価されます。同じパーティション名のデータが出力DataSetに存在する場合、新しいデータは、同じパーティション名で定義された古いデータをすべて置き換えます。そのパーティション名のデータが出力DataSetに存在しないと判断された場合は、新しいデータが新しいパーティションとして出力DataSetに追加されます。 例えば、入力DataSetに3月1日、3月2日、3月3日のデータが含まれている場合(パーティションはその日付にもとづいて定義されている)、出力DataSetの3月1日、2日、3日の既存データは、新しい入力データで置き換えられます。

パーティションのベストプラクティス

適切なパーティションには、パーティショニングの優れた処理速度を活用するのに十分なサイズと、固有のニーズに対応できる十分な粒度が必要です。 ほとんどの場合、日付ベースの日数レベルのパーティションは、この両方のバランスが取れています。ただし、1つのDataSetに5年を超える日数ベースのパーティションを保持する必要がある場合は、代わりに週レベルまたは月レベルのパーティションの使用を検討することを推奨します。 組織によっては、日数レベルより細かいパーティションを必要とします。このような組織では、DataFlowで2つ以上の列を結合することで、カスタムパーティションを作成できます。例えば、8つの店舗がある場合は、店舗IDと日付を結合したパーティションを作成することを推奨します。
重要: 各DataSetのパーティション数は3,000に制限されています。作成するパーティションの数が多すぎると、この制限に達して問題が発生する可能性があります。前述の例では、ストアIDと日付を使用してパーティションキーを作成する場合、375日分のデータのみを保存できます(3,000のパーティションを店舗数の8で割った数)。

パーティションを設定する

Magic ETLでDataSetを更新する方法としてパーティションを設定するには、以下の手順を実行します。
注記: 以下の手順は、すべての新しいパーティションを含む新規DataFlowを作成する場合に有効です。
  1. 出力DataSetをMagic ETLキャンバスにドラッグし、選択すると、画面下部のエディターが展開します。
  2. エディターの [設定] タブ で、更新方法として [パーティション] を選択します。
  3. [パーティション列の名] ドロップダウンから、データの分割に使用する列を選択します。
    Screenshot 2024-09-05 at 3.18.34 PM.png
  4. (オプション)出力DataSetに継続的に保持するパーティションの保持ポリシーを設定する場合は、 [保持するパーティションを指定します] というラベルの付いたトグルスイッチを切り替えます。
  5. (条件付き) [保持するパーティションを指定します] オプションを有効にすると、式を入力できるフィールドが表示されます。この式は指定されたパーティションをすべて保持します。その他のパーティションはすべて削除されます。 注記: このフィールドは、「 partition.name 」式のみを検証します。
    Screenshot 2024-09-05 at 3.21.06 PM.png
    ヒント: DataFlowにサブセット処理を追加する方法については、「 Magic ETLのサブセット処理 」を参照してください。
このページのトップへ

Upsert

Upsertでは、行レベルの固有のキーにもとづき、DataSet全体を再処理せずに、出力DataSetの行を更新できます。以下の図は、Upsertによるデータの置き換えと追加を表しています。
merge graphic.jpg

Upsertの基本

Upsertでは、DataSet全体をDataFlowの実行ごとに置き換えたり、DataFlowの実行で受信するすべての行を追加したりするのではなく、受信した行が新規レコードであるか出力DataSetの既存の行であるかに応じて、データの追加または置き換えが行われます。 Upsertではキーを使用します。このキーは、DataFlowの実行によって生成されたレコードが新規であるか、出力DataSetに既に存在するかを示します。行のキー値が既存の行のキー値と一致する場合、既存の行は受信行に置き換えられます。一致する値がない場合、受信行は新しい行として扱われ、出力DataSetに追加されます。

Upsertのベストプラクティス

Upsertキーは、単一の行の値、または複数の行の値の組み合わせにすることができますが、その行の一意性を示す必要があります。列内に重複する値がある場合は、Upsertキーを特定することができません。また、列にNULL値が含まれている場合も、Upsertキーを特定できません。 Upsertが更新方法として適しているのは、DataSet全体に散在する個々のレコードを不定期に更新する必要があり、その際に更新されるレコードの数が比較的少ない場合です。Upsertが適さないのは、毎回DataSet内の多くのレコードまたはほとんどのレコードを置換する場合です(このような場合には、 置き換え を使用するとパフォーマンスが向上します)。 Magic ETL DataFlowの更新方法としてUpsertが利用できることで、出力DataSetを更新するために再帰的なDataFlowを作成する必要がなくなります。

Upsertの設定

Magic ETLでDataSetを更新する方法としてUpsertを設定するには、以下の手順を実行します。
  1. 出力DataSetをMagic ETLキャンバスにドラッグし、選択すると、画面下部のエディターが展開します。
  2. エディターの [設定] タブで、 [更新方法] ドロップダウンから[Upsert]を選択します。
  3. [Upsertキー] ドロップダウンから、データのUpsertキーを識別するのに使用する列を選択します。
    upsert output.jpg
このページのトップへ 日本語