セリーズの概要
このブログシリーズは、Dataformの基本的な機能を超えて探索したいDataformユーザーを対象としています。他に、Dataformの強力なAPIに掘り下げ、GitHub Actionsで自動化されたCI/CDプロセスを作成し、コストを監視するパイプラインを構築し、config {}ブロックをコードを通じて変更します。
DataformのAPIは、Dataformのより強力でドキュメント化されていない機能に飛び込むための自然な出発点です。APIの理解を深めることで、ユーザーはDataformを自動化された現代のデータプラットフォームのすべての力を持つハブとして活用することができます.
Dataform APIの基本概念
APIには、どのワークフローにおいても基本的な構成要素として機能する二つのオブジェクトがあります:
-
CompilationResult- 特定の時点におけるDataformワークスペースのコンパイル済み状態(によるの構築の結果)です。 -
WorkflowInvocation-CompilationResultの単一の実行(によるの実行の結果)です。
CompilationResult
from google.cloud import dataform_v1
client = dataform_v1.DataformClient()
project_id = "my-project"
region = "europe-west2"
repository_id = "analytics"
workspace_id = "dev"
workspace = client.workspace_path(
project_id,
region,
repository_id,
workspace_id,
)
repository = client.repository_path(
project_id,
region,
repository_id,
)
compilation_result = dataform_v1.CompilationResult(
workspace=workspace
)
response = client.create_compilation_result(
parent=repository,
compilation_result=compilation_result,
)
print(response.name)
応答は以下の形式で提供されますprojects/<project_id>/locations/<region>/repositories/<repository_id>/compilationResults/<compilation_result_id>(<compilation_result_id> が UUID v4 である場所).
A CompilationResult オブジェクトは、Dataform UI でコード変更が検出されるたびに生成され、UI はその ID を隠す。ID は、実行後の UI の Executions ページで確認できる。
CompilationResult は、Dataform ワークスペース内の各ジョブに関する情報を含んでおり、ユーザーがコードを通じて DAG をたどり、各ファイルの config {} ブロックなどの情報を抽出することができます。各ジョブは次のように反復処理できます:
request = dataform_v1.QueryCompilationResultActionsRequest(
name=COMPILATION_RESULT
)
response = client.query_compilation_result_actions(
request=request
)
for action in response.compilation_result_actions:
...
WorkflowInvocation
from google.cloud import dataform_v1
client = dataform_v1.DataformClient()
project_id = "my-project"
region = "europe-west2"
repository_id = "analytics"
repository = client.repository_path(
project_id , region, repository_id
)
# compilation_result comes from the previous snippet
invocation = dataform_v1.WorkflowInvocation(
compilation_result=compilation_result.name
)
response = client.create_workflow_invocation(
parent=repository,
workflow_invocation=invocation,
)
print(f'{response.name}: {response.state}')
AWorkflowInvocation は、実行が実行されるたびに Dataform UI で生成されます:
WorkflowInvocationには、実行された各ジョブに関する情報が含まれており、ユーザーはジョブを BigQuery ジョブ ID に紐付け、作成されたオブジェクト(テーブルやビューなど)を確認できます。各実行されたジョブは、以下を通じて反復処理できます:
request = dataform_v1.QueryWorkflowInvocationActionsRequest
name=WORKFLOW_INVOCATION
)
response = client.query_workflow_invocation_actions(
request=request
)
for action in response.workflow_invocation_actions:
...
それらを結びつける
DataformのAPIの真正の力は、これら二つのオブジェクトが組み合わさった時に現れる。典型的なワークフローはこんな感じだ:
- ワークスペースが更新される(手動またはGitを通じて)、
- ワークスペースから
CompilationResultが生成される、 - そのコンパイルから
WorkflowInvocationが作成される、 - BigQueryがその結果としてのDAGを実行する。
これらの2つのオブジェクトで、Dataform UIの外でDataform DAGの構築と実行を自動化することが可能です。これは、後の投稿で詳しく説明するCI/CDパイプラインを容易にします。















