リポジトリの分割

このドキュメントでは、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 つのリポジトリ。

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

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

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

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

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

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

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

次のステップ