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