> ## Documentation Index
> Fetch the complete documentation index at: https://domoinc-bradley-turek-pfilter-operators-reference.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Magic ETLで再帰的/スナップショットDataFlowを作成する

## はじめに

「再帰的」または「スナップショット」DataFlowは、それ自身を入力として使用するDataFlowです。

DataFlow（SQLとMagic ETLの両方）は、コネクターのようにネイティブにデータを追加できません。ただし、データを追加するDataFlowを作成する必要がある場合は、それを一度実行し、その出力を次の実行のための入力の一部として使用することで可能になります。このようにすると、DataFlowが実行されるたびに、その前のデータが追加され、新しいデータもそれ自身に追加されます。

<Warning>\*\*重要：\*\*Magic ETLの動作が大幅に変更されました。ミッションクリティカルなMagic ETL DataFlowを変換する際は、事前に「[Magic ETLの動作変更と機能のアップデート](file:///hc/en-us/articles/360047787514)」をお読みください。**これをお読みいただくと、DataFlowで想定外の動作が生じた場合に備えることができます。**</Warning>

**動画 - 再帰的DataFlowとは？**

<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube-nocookie.com/embed/VkM5VznEzi8" width="560" />

<Warning>\*\*重要：\*\*再帰的DataFlowの編集に誤りがあると、これまでのデータがすべて失われることがあります。編集中にこれを回避するには、履歴DataSetのコピーである追加のDataSetを作成してください。コピーしたDataSetはそのまま保持されます。これまでのDataSetに何らかの問題が発生した場合に、編集前にコピーしたDataSetをバックアップとして使用できます。</Warning>

### Magic ETLで再帰的DataFlowを作成するには：

1. Magic ETL DataFlowを作成し、実行します。<img alt="1.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOu3.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=bcaf4dcfd3d64bff432a5044062a7c42" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="974" height="592" data-path="images/kb/ja/0EM5w000005vOu3.png" />
2. DataFlowを実行したら、出力DataSetを入力DataSetとして読み込みます。\
   出力タイルには出力DataSetの名前の後に「1」が表示されます。<img alt="2.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOu5.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=f94685febc8e22f2c317a32ff882514d" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="1006" height="584" data-path="images/kb/ja/0EM5w000005vOu5.png" />

   DataFlowに2つのDataSet（更新元のDataSetと履歴DataSet）がなければなりません。\
   次に、制約として使用する列を見つけます。これは、いつ履歴DataSetの中のデータを新しいデータに置換するかを決定する際に役に立ちます。制約列は通常、ID列または日付列、またはほかの一意の識別子です。この例では、「日付」列を制約として使用します。
3. \*\*［列を選択］\*\*を使用して、制約列のみを選択します。<img alt="step3.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOu9.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=4d3785f666e92f5e8ccd62e899e71c91" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="821" height="632" data-path="images/kb/ja/0EM5w000005vOu9.png" />
4. \*\*［重複を削除］\*\*を使用して、制約の一意のリストを返します。<img alt="step4.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOuE.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=4faeb18ac3579c3fd2a75b2fafa27d26" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="203" height="349" data-path="images/kb/ja/0EM5w000005vOuE.png" />
5. Outer Joinを使って新しいデータを履歴DataSetに結合します。Joinの左側にある履歴DataSetを選択した場合、下に示すように**Left Outer** Joinを使用します。Joinの右側にある履歴DataSetを選択した場合は、**Right Outer** Joinを使用します（データが失われる可能性があるので、**Inner Join**は選択しません）。日付列の名前が同じであれば、ステップ3で警告が表示されます。Left Outer Joinを行っている場合は、自動で右のテーブルを修正できます。Right Outer Joinを行っている場合は、自動で左のテーブルを修正できます。これにより競合する列が変更セクションに追加されます。保持したい場合は列の名前を変更し、そうでなければすべてを削除します。この場合、次のステップで［NULL値でなければ削除］に名前を変更します。<img alt="step5.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOuA.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=f5bbdd5a80ac41ace6258e755f6edce8" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="1209" height="936" data-path="images/kb/ja/0EM5w000005vOuA.png" /><img alt="7.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOuC.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=05690758a9cf7c014b2af528a4080439" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="700" height="453" data-path="images/kb/ja/0EM5w000005vOuC.png" />
6. 新しい日付列がNULL値でないDataSetから任意の行をフィルターします。\
   これは、新しい更新DataSetの中に存在しない、履歴DataSetからの行のみを返します。フィルタールールを追加するか、下の例のようにスクリプトルールを追加します。<img alt="step6.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOtp.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=53e92291c13f3081f738fcf6d229d1be" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="885" height="339" data-path="images/kb/ja/0EM5w000005vOtp.png" />

   **フィルタールールを追加：**<img alt="9.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOuG.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=e1028635cda6fc20b7e8155c933fac39" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="17" height="19" data-path="images/kb/ja/0EM5w000005vOuG.png" />

   **スクリプトルールを追加：**<img alt="10.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOtz.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=9ae2f224bc6c4c3293835634d40c9b3f" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="857" height="316" data-path="images/kb/ja/0EM5w000005vOtz.png" />
7. \*\*［列を選択］\*\*を使用して、余分な日付列を削除します。<img alt="step7.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOu7.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=3020729e4b300a3c10e3507a07fc390b" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="1572" height="661" data-path="images/kb/ja/0EM5w000005vOu7.png" />
8. \*\*［追加］\*\*を使用して、履歴DataSetと新しい更新DataSetをJoinします。すべてのステップが正しく実行されている場合、DataSetは両方とも「変更なし」を表示します。\
   結合する列間でデータタイプが一致しない場合、データの処理方法を必ず選択してください。このオプションの詳細については、「[Magic ETLの動作変更と機能のアップデート](/s/article/360047787514)」の「行を追加（Union）」セクションを参照してください。<img alt="step8.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOto.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=be4ad4c66aaea83447604b8e45fc9db4" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="1043" height="815" data-path="images/kb/ja/0EM5w000005vOto.png" />
9. \*\*［追加］\*\*タイルを出力に接続します。完了すると、ETLは以下のようになります。<img alt="step9.png" src="https://mintcdn.com/domoinc-bradley-turek-pfilter-operators-reference/ViDASlgbz7VGcVvj/images/kb/ja/0EM5w000005vOuH.png?fit=max&auto=format&n=ViDASlgbz7VGcVvj&q=85&s=c6431f2bd5b1b6946bbe853b455e6c6a" style={{width: 20, height: 20, display: 'inline', verticalAlign: 'start', margin: '0'}} width="1112" height="471" data-path="images/kb/ja/0EM5w000005vOuH.png" />

### トラブルシューティング/よくある質問

DataFlowの構築時に見られる一般的な問題とエラーについては、「[DataFlowの使用時にユーザーが最も経験する5つの問題](/s/article/360043427913)」を参照してください。
