リポジトリの分割

このドキュメントでは、Dataform リポジトリを分割し、リポジトリ間の依存関係を管理する戦略について説明します。

リポジトリは Dataform のコアユニットです。リポジトリには、SQL ワークフローを構成するすべての SQLX ファイルと JavaScript ファイル、Dataform 構成ファイルとパッケージが保存されます。SQL ワークフローを単一のリポジトリに保存することも、SQL ワークフローを複数のリポジトリに分割することもできます。

Dataform でのリポジトリの分割には、次のような利点があります。

  • コンパイル リソースの使用量に関する Dataform の上限を遵守します。大規模な SQL ワークフローを複数の小さなリポジトリに分割すると、コンパイル リソースで Dataform の制限を超えるリスクが低くなります。
  • きめ細かいプロセス。継続的インテグレーション(CI)ルールなどのプロセスは、SQL ワークフローの分割フラグメントとそれを開発するチームに対して個別に設定できます。
  • 権限の詳細な管理 SQL ワークフローの分割フラグメントごとに権限を設定して、開発するチームが SQL ワークフローの全体的なセキュリティを強化できます。
  • SQL ワークフローの各スプリット フラグメントで作業する共同編集者の数を最小限に抑え、コラボレーションを改善します。
  • コードベースの読みやすさを向上させます。大規模な SQL ワークフローを構成するファイルを複数のリポジトリに分割すると、SQL ワークフロー全体を一度に移動するよりも、各リポジトリを個別にナビゲートしやすくなります。
  • SQL ワークフロー全体を実行する場合と比較して、SQL ワークフローの各スプリット フラグメントの実行を高速化します。

Dataform でのリポジトリの分割には、次のようなデメリットがあります。

  • 各 Dataform リポジトリと、対応する Git リポジトリに必要なカスタム継続的インテグレーション/継続的開発(CI/CD)構成。
  • 各 Dataform リポジトリとそれに対応する Git リポジトリに必要なカスタム スケジューリング構成。
  • 複数のリポジトリに格納されているワークフローのオブジェクト間の依存関係を管理する難しさ。
  • 複数のリポジトリ間で分割された SQL ワークフローの包括的な有向非巡回グラフ(DAG)の可視化がない。各リポジトリで生成される DAG は、完全な SQL ワークフローの一部のみを表します。

リポジトリを分割するための戦略

リポジトリを分割する際には、親 SQL ワークフローを構成するファイルを、Dataform の別のリポジトリに格納されている小さな子 SQL ワークフローに分割します。

次のいずれかの方法でリポジトリを分割できます。

  • 開発チームごとに 1 つのリポジトリ。
  • セールス、マーケティング、ロジスティクスなど、ドメインごとに 1 つのリポジトリ。
  • ドメインごとに 1 つの中央リポジトリと 1 つのリポジトリ。中央リポジトリの内容をデータソースとして使用します。

サードパーティの Git ホスティング プラットフォームで親 SQL ワークフローを格納するには、子ワークフローを含む個別のリポジトリをそれぞれ専用のサードパーティ Git リポジトリに接続する必要があります。

リポジトリ間の依存関係の管理

リポジトリを分割する最も効率的な方法は、親 SQL ワークフローを自己完結型の子 SQL ワークフローに分割し、独立したリポジトリを作成することです。独立したリポジトリで、異なるリポジトリの内容をデータソースとして使用することはありません。このアプローチでは、リポジトリ間の依存関係を管理する必要はありません。

リポジトリ間の依存関係を回避できない場合は、リポジトリを連続するリポジトリに分割することで管理できます。このリポジトリは、リポジトリが前者に依存し、後継のデータソースです。リポジトリの継承とその依存関係は、親 SQL ワークフローの構造を最もよく反映している必要があります。

Dataform データソース宣言を使用して、リポジトリ間で依存関係を作成できます。 現在編集されているリポジトリにあるデータソースとして、別の Dataform リポジトリから BigQuery テーブルタイプを宣言できます。データソースを宣言したら、他の Dataform SQL ワークフロー オブジェクトと同様に参照し、それを使用して SQL ワークフローを開発できます。

リポジトリ間の依存関係を持つリポジトリ間で SQL ワークフロー分割をスケジュールする場合は、リポジトリ間の依存関係を基準としてリポジトリを 1 つずつ実行する必要があります。

リポジトリを双方向の依存関係を持つリポジトリのグループに分割しないことをおすすめします。リポジトリ間の双方向の依存関係は、リポジトリが別のリポジトリのデータソースであり、そのリポジトリをデータソースとして使用する場合にも発生します。リポジトリ間の双方向の依存関係により、親 SQL ワークフローのスケジューリングと実行、および開発プロセスが複雑になります。

次のステップ