データ接続と統合概要インクリメンタル変換概要

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

概要

インクリメンタル計算は、トランスフォームを実行して出力データセットを生成する効率的な方法です。トランスフォームのビルド履歴を活用することで、トランスフォームを実行するたびに出力データセット全体を再計算する必要がなくなります。

エンドツーエンドのインクリメンタルパイプラインの作成と管理に関するガイダンスについては、building pipelines セクションをご覧ください。

例: 非インクリメンタルトランスフォームとインクリメンタルトランスフォーム

このセクションでは、インクリメンタルトランスフォームの利点を、まずインクリメンタルトランスフォームを使用しないコード例を検討することで確認します:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 from transforms.api import transform, Input, Output @transform( students=Input('/examples/students_hair_eye_color'), processed=Output('/examples/hair_eye_color_processed') ) def filter_hair_color(students, processed): # type: (TransformInput, TransformOutput) -> None students_df = students.dataframe() # これは非効率的です。フィルタ関数が新しいデータのみではなく、全ての入力データに対して実行されます。 processed.write_dataframe(students_df.filter(students_df.hair == 'Brown'))

/examples/students_hair_eye_color 入力データセットに新しいデータが追加されると、入力全体に対して filter() が実行され、新しく追加されたデータだけでなく、すべてのデータに対して処理が行われます。これは、計算リソースと時間の無駄です。

トランスフォームがビルド履歴を把握できるようになると、出力の計算方法をより賢くすることができます。具体的には、入力に加えられた変更を使用して出力データセットを修正できます。このように、テーブルを再マテリアライズする際に既にマテリアライズされたデータを使用するプロセスを インクリメンタル計算 と呼びます。インクリメンタル計算がない場合、出力データセットは常にトランスフォームの最新の出力で置き換えられます。

先ほどの例のトランスフォームに戻りましょう。このトランスフォームは students データセットに対して filter() を実行し、茶髪の学生を出力します。インクリメンタル計算を使用すると、students に新しい学生のデータが 2 個追加された場合、トランスフォームはビルド履歴に関する情報を使用して新しい茶髪の学生のみを出力に追加することができます。

+---+-----+-----+------+                  +---+-----+-----+------+
| id| hair|  eye|   sex|                  | id| hair|  eye|   sex|
+---+-----+-----+------+     Build 1      +---+-----+-----+------+
| 17|Black|Green|Female|    --------->    | 18|Brown|Green|Female|
| 18|Brown|Green|Female|                  +---+-----+-----+------+
| 19|  Red|Black|Female|
+---+-----+-----+------+
        ...                                         ...
+---+-----+-----+------+     Build 2      +---+-----+-----+------+
| 20|Brown|Amber|Female|    --------->    | 20|Brown|Amber|Female|
| 21|Black|Blue |Male  |                  +---+-----+-----+------+
+---+-----+-----+------+

# コメント:
# このコードスニペットは、データセットのビルド1とビルド2の間での変化を示しています。
# 各ビルドには、個々の人物の属性(id、髪の色、目の色、性別)が含まれています。
# ビルド1からビルド2への変化の例として、id 18の人物がビルド1からビルド2に移動しています。
# また、ビルド2ではid 20とid 21の人物が追加されています。

したがって、上記の例のトランスフォームは、以下の構文でインクリメンタルロジックを使用して書き換えることができます。 インクリメンタル変換と@incrementalデコレータに関する詳細は、インクリメンタル変換リファレンスをご覧ください。

データセットのうち1つが完全に読み込まれる参照テーブルで、もう1つがインクリメンタルに読み込まれるインクリメンタルデータセットの場合、結合を計算することは安全です。ただし、結合に参加する両方のデータセットをインクリメンタルに読み込む必要がある場合は、特別な処理が必要です。大規模データセットの結合にインクリメンタル変換を活用する例を参照してください。

軽量変換での使用

インクリメンタル計算は、軽量変換でもサポートされています。以下に示す軽量インクリメンタル変換の例をご覧ください。