Como dividir repositórios

Neste documento, abordamos estratégias para dividir um repositório do Dataform e gerenciar dependências entre repositórios.

Os repositórios são as unidades principais do Dataform. Um repositório armazena todos os arquivos SQLX e JavaScript que compõem seu fluxo de trabalho SQL, além de arquivos e pacotes de configuração do Dataform. É possível armazenar um fluxo de trabalho SQL em um único repositório ou dividir um fluxo de trabalho SQL entre vários repositórios.

A divisão de um repositório no Dataform tem as seguintes vantagens:

  • Seguir os limites do Dataform sobre o uso de recursos de compilação. Dividir um fluxo de trabalho SQL grande em vários repositórios menores diminui o risco de exceder os limites do Dataform nos recursos de compilação.
  • Processos de granulação. É possível definir processos, como regras de integração contínua (CI), individualmente para cada fragmento dividido do fluxo de trabalho SQL e a equipe que o desenvolve.
  • Permissões de granularidade. É possível definir permissões individualmente para cada fragmento de divisão do fluxo de trabalho SQL e para a equipe que o desenvolve para melhorar a segurança geral desse fluxo.
  • Melhorar a colaboração minimizando o número de colaboradores trabalhando em cada fragmento de divisão do fluxo de trabalho SQL.
  • Melhorar a legibilidade da base de código. Dividir os arquivos que compõem um grande fluxo de trabalho SQL em vários repositórios facilita a navegação em cada repositório individualmente do que navegar por todo o fluxo de trabalho SQL de uma só vez.
  • Aceleração da execução do fluxo de trabalho de cada fragmento de divisão do fluxo de trabalho SQL em comparação com a execução de todo o fluxo de trabalho SQL.

A divisão de um repositório no Dataform tem as seguintes desvantagens:

  • Configuração personalizada de integração contínua/desenvolvimento contínuo (CI/CD) necessária para cada repositório do Dataform e o repositório Git correspondente.
  • Configuração de programação personalizada necessária para cada repositório do Dataform e o repositório Git correspondente.
  • Dificuldade para gerenciar dependências entre objetos do fluxo de trabalho hospedados em vários repositórios.
  • Não há visualização abrangente do gráfico acíclico dirigido (DAG, na sigla em inglês) da divisão do fluxo de trabalho SQL entre vários repositórios. Em cada repositório, o DAG gerado representa apenas uma parte do fluxo de trabalho SQL completo.

Estratégias para dividir um repositório

Ao dividir um repositório, você divide os arquivos que compõem um fluxo de trabalho SQL pai em fluxos de trabalho SQL filhos menores hospedados em repositórios separados do Dataform.

É possível dividir um repositório de uma das seguintes maneiras:

  • Um repositório por equipe de desenvolvimento.
  • Um repositório por domínio, por exemplo, para vendas, marketing ou logística.
  • Um repositório central e um por domínio que usa o conteúdo do repositório central como fontes de dados.

Para hospedar o fluxo de trabalho SQL pai na plataforma de hospedagem Git de terceiros, você precisa conectar individualmente cada um dos repositórios separados que contêm fluxos de trabalho filhos a um repositório Git dedicado de terceiros.

Como gerenciar dependências entre repositórios

A maneira mais eficiente de dividir um repositório é dividir o fluxo de trabalho SQL pai em fluxos de trabalho SQL filhos independentes, criando repositórios independentes. Um repositório independente não usa o conteúdo de outro repositório como fonte de dados. Essa abordagem não requer o gerenciamento de dependências entre repositórios.

Quando não for possível evitar dependências entre repositórios, você pode gerenciá-las dividindo um repositório em uma sucessão de repositórios em que um repositório depende do seu antecessor e é uma fonte de dados para seu sucessor. A sucessão de repositórios e as dependências deles precisam refletir melhor a estrutura do fluxo de trabalho SQL pai.

É possível criar dependências entre repositórios com declarações de fonte de dados do Dataform. É possível declarar um tipo de tabela do BigQuery de um repositório diferente do Dataform como uma fonte de dados no repositório editado atualmente. Depois de declarar uma fonte de dados, é possível referenciá-la como qualquer outro objeto de fluxo de trabalho SQL do Dataform e usá-la para desenvolver seu fluxo de trabalho SQL.

Ao programar a execução de um fluxo de trabalho SQL dividido entre repositórios com dependências entre repositórios, você precisa executar os repositórios um por um na ordem de dependências entre repositórios.

Recomendamos evitar a divisão de um repositório em um grupo de repositórios com dependências bidirecionais. Uma dependência bidirecional entre repositórios ocorre quando um repositório é uma fonte de dados para um repositório diferente e também o usa como fonte de dados. As dependências bidirecionais entre repositórios complicam a programação e a execução do fluxo de trabalho SQL pai, bem como os processos de desenvolvimento.

A seguir