はじめに
Magic ETLの出力DataSetタイルには、置き換え、追加、パーティション、Upsertの4つのDataSet更新方法があります。DataFlowの最適な更新方法は、ユースケースによって異なります。更新方法
以下の表に、使用できる各方法の基本的な定義を示します。各方法の詳細については、リンク先を参照してください。 更新方法の詳細については、一般的な「 DataSet更新方法 」(Magic ETL以外の方法)の記事を参照してください。置き換え
置き換えは、Magic ETLのデフォルトの更新方法です。これにより、DataSet内の既存のデータがすべて削除され、Magic ETL DataFlowの実行による新しいバッチデータに置き換えられます。この方法は、出力DataSetが比較的小さい場合や、DataFlowを実行するたびにすべてのデータを更新する必要がある場合に適しています。
追加
追加では、Magic ETL DataFlowの実行に起因するすべてのデータを取得し、出力DataSetに追加します。この方法では、出力DataSet内の既存のデータを一切考慮しないため、重複の可能性を考慮することなしに新しいデータを追加します。追加は、DataFlowを実行するたびに、既存の出力DataSetに新しい行を追加する必要がある場合に適しています。ただし、この更新方法は脆弱であり、データが重複したり欠落したりする可能性があります。
パーティション
パーティションは、データをグループに整理して、データの更新をより迅速かつ効率的に行う方法です。以下の図は、データをパーティションに置き換えて追加する方法を示しています。
パーティションの基礎
パーティションについては、一般的に、物理的な百科事典(同じセットの一部でありながら個々の異なる巻を集めたもの)に例えて考えると理解しやすいでしょう。例えば、セット内の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と日付を結合したパーティションを作成することを推奨します。パーティションを設定する
Magic ETLでDataSetを更新する方法としてパーティションを設定するには、以下の手順を実行します。注記: 以下の手順は、すべての新しいパーティションを含む新規DataFlowを作成する場合に有効です。
- 出力DataSetをMagic ETLキャンバスにドラッグし、選択すると、画面下部のエディターが展開します。
- エディターの [設定] タブ で、更新方法として [パーティション] を選択します。
-
[パーティション列の名] ドロップダウンから、データの分割に使用する列を選択します。

- (オプション)出力DataSetに継続的に保持するパーティションの保持ポリシーを設定する場合は、 [保持するパーティションを指定します] というラベルの付いたトグルスイッチを切り替えます。
-
(条件付き) [保持するパーティションを指定します] オプションを有効にすると、式を入力できるフィールドが表示されます。この式は指定されたパーティションをすべて保持します。その他のパーティションはすべて削除されます。
注記: このフィールドは、「 partition.name 」式のみを検証します。

Upsert
Upsertでは、行レベルの固有のキーにもとづき、DataSet全体を再処理せずに、出力DataSetの行を更新できます。以下の図は、Upsertによるデータの置き換えと追加を表しています。
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を設定するには、以下の手順を実行します。- 出力DataSetをMagic ETLキャンバスにドラッグし、選択すると、画面下部のエディターが展開します。
- エディターの [設定] タブで、 [更新方法] ドロップダウンから[Upsert]を選択します。
-
[Upsertキー] ドロップダウンから、データのUpsertキーを識別するのに使用する列を選択します。
