このドキュメントでは、Dataform で Dataform コアを使用してテーブルを定義する方法について説明します。
テーブル定義について
テーブルを定義するには、テーブルタイプを定義し、type: "table"
SQLX ファイルに SELECT
ステートメントを記述します。次に、Dataform は、Dataform コアのコードを SQL にコンパイルして SQL コードを実行し、BigQuery で定義済みテーブルを作成します。
Dataform コアの SELECT
ステートメントでは、テーブル構造を定義して、SQL ワークフローの他のオブジェクトを参照します。
type: "table"
SLQX ファイルでテーブルを定義するだけでなく、type: "operations"
SQLX ファイルでカスタム SQL クエリを定義することで、空のテーブルを作成できます。詳細については、空のテーブルを作成するをご覧ください。
ref
を使用して依存関係を参照する
SELECT
ステートメントで SQL ワークフロー オブジェクトを参照し、自動的に依存関係として追加するには、ref
関数を使用します。Dataform は、正しいパイプラインの順序を確保するため、テーブルに依存するテーブルの前に依存関係を実行します。
ref
関数は、Dataform の依存関係管理に不可欠な Dataform コアの組み込み関数です。ref
関数を使用すると、スキーマとテーブルの名前をハードコードする代わりに、Dataform SQL ワークフローで定義された次のオブジェクトを参照して自動的に依存できます。
- サポートされているすべてのテーブルタイプのテーブル
- データソースの宣言
hasOutput
プロパティをtrue
に設定したカスタム SQL オペレーション
Dataform は ref
関数を使用して、作成または更新されるすべてのテーブルの依存関係ツリーを構築します。
コンパイル後、Dataform は CREATE
、REPLACE
、INSERT
、MERGE
などのボイラープレート ステートメントを SQL ステートメントに追加します。
次のコードサンプルは、ref
関数を使用したテーブル定義を示しています。
config { type: "table" }
SELECT
order_date AS date,
order_id AS order_id,
order_status AS order_status,
SUM(item_count) AS item_count,
SUM(amount) AS revenue
FROM ${ref("store_clean")}
GROUP BY 1, 2
ref
関数で、依存するテーブルまたはデータソース宣言の名前を指定します。これは通常、そのテーブルまたはデータソース宣言が定義されている SQLX ファイルのファイル名です。
テーブル名がオーバーライドされている場合は、ref
関数でオーバーライドされた名前を使用します。
たとえば、config { name: "overridden_name" }
を ref("overridden_name")
としてテーブルを参照します。テーブル名のオーバーライドの詳細については、追加のテーブル設定を構成するをご覧ください。
異なるスキーマに同じ名前の複数のテーブルがある場合、ref
関数にスキーマ名とテーブル名という 2 つの引数を指定することで、特定のテーブルを参照できます。
次のコードサンプルは、特定のスキーマ内のテーブルを指定する 2 つの引数を含む ref
関数を示しています。
config { type: "table" }
SELECT * FROM ${ref("schema", "store_clean")}
また、SELECT
ステートメントの ref
関数で参照されていないテーブル、アサーション、データソース宣言、またはカスタム SQL オペレーションの config
ブロックにテーブルの依存関係を手動で追加することもできます。Dataform は、従属テーブルの前にこれらの依存関係を実行します。
次のコードサンプルは、config
ブロックのテーブルの依存関係を示します。
config { dependencies: [ "unreferenced_table" ] }
SELECT * FROM ...
SQL ワークフローでの依存関係管理の詳細については、依存関係の宣言をご覧ください。
resolve
を使用して他のテーブルを参照する
resolve
関数を使用すると、ref
関数のように SELECT
ステートメントでテーブルまたはデータソースの宣言を参照できますが、参照は依存関係として追加されません。つまり、resolve
を使用して参照されるオブジェクトは、resolve
を使用するテーブルの実行には影響しません。
組み込みの Dataform コア関数の詳細については、Dataform コアのリファレンスをご覧ください。
始める前に
必要なロール
テーブルの定義に必要な権限を取得するには、ワークスペースに対する Dataform 編集者 (roles/dataform.editor
)IAM ロールの付与を管理者に依頼してください。
ロールの付与の詳細については、アクセスの管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
テーブル定義の SQLX ファイルを作成する
テーブル定義の SQLX ファイルを definitions/
ディレクトリに保存します。新しい SQLX ファイルを definitions/
ディレクトリ内に作成する手順は次のとおりです。
Cloud コンソールで、[Dataform] ページに移動します。
リポジトリを開くには、リポジトリ名をクリックします。
開発ワークスペースを開くには、ワークスペース名をクリックします。
[ファイル] ペインで、
definitions/
の横にある [その他] メニューをクリックします。[ファイルを作成] をクリックします。
[ファイルパスを追加] フィールドに、ファイルの名前の後に
definitions/
の後に.sqlx
を入力します。例:definitions/my-table.sqlx
。ファイル名に使用できるのは、数字、文字、ハイフン、アンダースコアのみです。
[ファイルを作成] をクリックします。
テーブルタイプを定義する
新しいテーブルタイプ定義を作成するには、次の手順に沿って操作します。
- 開発ワークスペースの [ファイル] ペインで、
definitions/
ディレクトリを展開します。 - 編集するテーブル定義 SQLX ファイルを選択します。
このファイルに、次のコード スニペットを入力します。
config { type: "TABLE_TYPE" }
TABLE_TYPE は、次のいずれかのテーブルタイプに置き換えます。
table
incremental
view
(省略可)マテリアライズド ビューを定義するには、
type: "view"
の下にmaterialized
プロパティを次の形式で入力します。config { type: "view", materialized: true }
詳細については、
ITableConfig
Dataform コアのリファレンスをご覧ください。
テーブルの構造と依存関係を定義する
テーブル定義の SELECT
ステートメントを作成し、テーブル構造と依存関係を定義するには、次の手順を行います。
- 開発ワークスペースの [ファイル] ペインで、
definitions/
ディレクトリを展開します。 - 編集するテーブル定義 SQLX ファイルを選択します。
config
ブロックの下にSELECT
ステートメントを記述します。
次のコードサンプルは、SELECT
ステートメントと ref
関数を使用したテーブル定義を示しています。
config { type: "table" }
SELECT
customers.id AS id,
customers.first_name AS first_name,
customers.last_name AS last_name,
customers.email AS email,
customers.country AS country,
COUNT(orders.id) AS order_count,
SUM(orders.amount) AS total_spent
FROM
dataform-samples.dataform_sample.crm_customers AS customers
LEFT JOIN ${ref('order_stats')} orders
ON customers.id = orders.customer_id
WHERE
customers.id IS NOT NULL
AND customers.first_name <> 'Internal account'
AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')
GROUP BY 1, 2, 3, 4, 5
手動のテーブル依存関係を追加する
SELECT
ステートメントで参照されていないものの、現在のテーブルの前に実行する必要があるテーブルの依存関係を追加するには、次の手順を行います。
- 開発ワークスペースの [ファイル] ペインで、
definitions/
ディレクトリを展開します。 - 編集するテーブル定義 SQLX ファイルを選択します。
- 表の
config
ブロックに、次のコード スニペットを入力します。
dependencies: [ "DEPENDENCY_TABLE", ]
DEPENDENCY_TABLE は、依存関係として追加するテーブルのファイル名に置き換えます。複数のファイル名を入力できます。
次のサンプルコードは、テーブル定義ファイルの config
ブロックに手動のテーブル依存関係として追加される 2 つのテーブルを示しています。
config { dependencies: [ "some_table", "some_other_table" ] }
次のステップ
- 増分テーブルの構成方法については、増分テーブルを構成するをご覧ください。
- テーブルのパーティションとクラスタを構成する方法については、テーブルのパーティションとクラスタの作成をご覧ください。
- テーブルにドキュメントを追加する方法については、テーブル ドキュメントの追加をご覧ください。
- アサーションを使用してテーブルデータを検証する方法については、アサーションを使用してテーブルを検証するをご覧ください。
- JavaScript を使用してテーブルを定義する方法については、JavaScript を使用した SQL ワークフローの作成をご覧ください。
- 追加のテーブル設定を構成する方法については、追加のテーブル設定の構成をご覧ください。