このドキュメントでは、依存関係を宣言することによって、Dataform の SQL ワークフローでオブジェクト間の関係を定義する方法について説明します。
SQL ワークフローのオブジェクト間の依存関係を定義できます。依存関係では、依存オブジェクトの実行は依存関係オブジェクトの実行に依存します。つまり、Dataform は依存関係の後に依存を実行します。関係を定義するには、依存オブジェクトの SQLX 定義ファイル内で依存関係を宣言します。
依存関係の宣言は、Dataform が SQL ワークフロー オブジェクトを実行する順序を決定する SQL ワークフローの依存関係ツリーを構成します。
次の SQL ワークフロー オブジェクト間の依存関係を定義できます。
- データソースの宣言
- Dataform のテーブル定義と SQL オペレーションでこれらのデータソースを参照できるようにする BigQuery データソースの宣言。データソース宣言は依存関係として設定できますが、依存として設定することはできません。
- テーブル
- SQL ワークフロー内で宣言されたデータソースまたは他のテーブルに基づいて Dataform で作成するテーブル。Dataform は、テーブル、増分テーブル、ビュー、マテリアライズド ビューのテーブルタイプをサポートしています。テーブルを依存関係または依存として設定できます。
- カスタム SQL オペレーション
- Dataform が変更なしでそのまま BigQuery で実行する SQL ステートメント。
type: operations
ファイルで定義されたカスタム SQL オペレーションを依存関係および依存として設定できます。カスタム SQL オペレーションをref
関数の依存関係として宣言するには、カスタム SQL オペレーション SQLX 定義ファイルでhasOutput
プロパティをtrue
に設定する必要があります。 - アサーション
- テーブルデータのテストに使用できるデータ品質のテストクエリ。Dataform は、SQL ワークフローを更新するたびにアサーションを実行し、アサーションが失敗した場合にアラートを送信します。
type: assertion
ファイルで定義されたアサーションを依存関係および依存として設定するには、config
ブロックで依存関係を宣言します。
依存関係は、次の方法で定義できます。
- Dataform コアの
ref
関数を使用して依存関係を宣言し、SELECT
ステートメント内で依存関係を参照します。 - SQLX 定義ファイルの
config
ブロックで依存関係のリストを宣言します。
始める前に
- リポジトリで開発ワークスペースを作成して初期化します。
- 省略可: データソースを宣言します。
- 少なくとも 2 つの SQL ワークフロー オブジェクト(テーブル、アサーション、データソース宣言またはオペレーション)を作成します。
必要なロール
テーブル、アサーション、データソース宣言、カスタム SQL オペレーションの依存関係を宣言するために必要な権限を取得するには、管理者にワークスペースに対する Dataform 編集者(roles/dataform.editor
)IAM ロールの付与を依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
依存関係を ref
関数の引数として宣言する
依存関係を SELECT
ステートメントで参照して自動的に宣言するには、依存関係を ref
関数の引数として追加します。
ref
機能は、Dataform のコア組み込み関数であり、テーブル、データソース宣言、カスタム SQL オペレーション hasOutput
プロパティを true
に設定します。
ref
関数の詳細については、Dataform コア コンテキスト メソッドのリファレンスをご覧ください。
テーブル定義で ref
関数を使用する方法について詳しくは、テーブル定義の概要をご覧ください。
次のコードサンプルは、増分テーブルの incremental_table.sqlx
SQLX 定義ファイルで ref
関数の引数として追加された source_data
データソース宣言を示しています。
// filename is incremental_table.sqlx
config { type: "incremental" }
SELECT * FROM ${ref("source_data")}
前述のコードサンプルでは、source_data
が incremental_table
の依存関係として自動的に宣言されています。
次のコードサンプルは、アサーションの custom_assertion.sqlx
SQLX 定義ファイルで ref
関数の引数として追加された some_table
テーブル定義 SQLX ファイルを示しています。
// filename is custom_assertion.sqlx
config { type: "assertion" }
SELECT
*
FROM
${ref("some_table")}
WHERE
a is null
or b is null
or c is null
前述のコードサンプルでは、some_table
が custom_assertion
の依存関係として自動的に宣言されています。実行中、Dataform はまず some_table
を実行し、some_table
が作成されると custom_assertion
を実行します。
config
ブロックで依存関係を宣言する
依存の SQL ステートメント定義で参照されていないものの、テーブル、アサーション、またはカスタム SQL オペレーションの前に実行する必要がある依存関係を宣言するには、次の手順を行います。
- 開発ワークスペースの [ファイル] ペインで、
definitions/
ディレクトリを展開します。 - 編集するテーブル、アサーション、またはカスタム SQL オペレーションの SQLX ファイルを選択します。
ファイルの
config
ブロックに、次のコード スニペットを入力します。dependencies: [ "DEPENDENCY", ]
DEPENDENCY は、テーブル、アサーション、データソース宣言、または依存関係として追加するカスタム SQL オペレーションのファイル名に置き換えます。複数のファイル名をカンマで区切って入力できます。
省略可: [書式] をクリックします。
次のサンプルコードは、テーブル定義ファイルの config
ブロックに依存関係として追加される some_table
テーブルと some_assertion
アサーションを示しています。
config { dependencies: [ "some_table", "some_assertion" ] }
次のステップ
- アサーションを依存関係として設定する方法について、アサーションを使用してテーブルをテストするを確認する。
- データソースを宣言する方法について、データソースを宣言するを確認する。
- カスタム SQL オペレーションを定義する方法について、カスタム SQL オペレーションの追加を確認する。
- インクルードを使用して SQL ワークフロー全体でコードを再利用する方法について、インクルードを使用して変数と関数を再利用するを確認する。