Como gerenciar o ciclo de vida do código

Neste documento, descrevemos as práticas recomendadas para gerenciar o ciclo de vida do código no Dataform: como criar ambientes de desenvolvimento, preparo e produção e definir configurações de compilação e execução para cada ambiente.

Para criar um ciclo de vida padronizado de fluxos de trabalho SQL do Dataform que mantenha a higiene de dados e otimize os processos de desenvolvimento, recomendamos que você:

  • Crie ambientes de execução para isolar as tabelas criadas durante o desenvolvimento daquelas disponíveis para os usuários finais.

  • Defina as configurações de versão e fluxo de trabalho para executar fluxos de trabalho em um ambiente de produção e, opcionalmente, em um ambiente de teste.

Neste documento, descrevemos soluções para isolar tabelas de desenvolvimento com substituições de compilação do espaço de trabalho e configurar configurações de versão e configurações de fluxo de trabalho de ambientes de preparo e produção.

Essas soluções permitem criar ambientes de execução em um único repositório do Dataform e em um projeto do Google Cloud. É possível ter várias cópias de um repositório do Dataform, hospedadas em projetos diferentes do Google Cloud, com cada projeto correspondente a um estágio do ciclo de vida do código, por exemplo, desenvolvimento, preparo e produção. Essa abordagem permite personalizar as permissões do Identity and Access Management em cada estágio do ciclo de vida do código.

Práticas recomendadas para ambientes de execução isolados

Recomendamos isolar as tabelas criadas durante as execuções do fluxo de trabalho SQL de desenvolvimento das tabelas de produção no BigQuery. Isso garante que os usuários finais possam navegar até as tabelas de produção e elimina o risco de eles acessarem dados incorretos por acidente.

É possível criar ambientes de execução isolados das seguintes maneiras:

Dividir tabelas de desenvolvimento e produção por esquema
Recomendado para equipes pequenas. O Dataform cria tabelas de desenvolvimento e produção em diferentes esquemas no BigQuery. O Dataform executa todas as tabelas de desenvolvimento em esquemas que têm o mesmo sufixo, o que marca que elas foram criadas durante o desenvolvimento. Os desenvolvedores podem substituir as tabelas de desenvolvimento uns dos outros.
Dividir tabelas de desenvolvimento e produção por esquema e projeto do Google Cloud
Recomendado para equipes de tamanho médio. O Dataform cria tabelas de desenvolvimento e produção em diferentes esquemas e projetos no BigQuery. O Dataform publicou todas as tabelas de desenvolvimento em um projeto de desenvolvimento do Google Cloud. Cada desenvolvedor do Dataform tem o próprio esquema exclusivo para tabelas de desenvolvimento. Essa solução elimina o risco de os desenvolvedores substituirem acidentalmente as tabelas de desenvolvimento uns dos outros. A desvantagem dessa abordagem é que a exclusão de tabelas e esquemas de desenvolvimento e a recriação de todas as tabelas em cada ambiente podem exigir mais tempo.
Dividir tabelas de desenvolvimento, preparo e produção por projeto do Google Cloud
Recomendado para equipes grandes ou que precisam de um ambiente de teste. O Dataform executa tabelas de cada ambiente em um projeto dedicado do Google Cloud no BigQuery. Essa solução oferece maior controle sobre o ciclo de vida do código.

Todas as soluções exigem um único repositório do Dataform conectado a um único repositório remoto de terceiros.

Em todas as soluções, os desenvolvedores acionam manualmente as execuções de tabelas de desenvolvimento dentro dos espaços de trabalho do Dataform. O Dataform compila automaticamente tabelas de produção e preparo em uma configuração de versão e as executa na frequência definida em uma configuração de fluxo de trabalho.

Dividir desenvolvimento e produção por esquema

Esta solução cria dois ambientes de execução em que o Dataform executará seus fluxos de trabalho SQL: desenvolvimento e produção. Para dividir as tabelas de desenvolvimento e produção por esquema, é preciso definir as configurações do fluxo de trabalho, as substituições de compilação do espaço de trabalho e uma configuração de versão. Para programar execuções de produção, crie uma configuração de fluxo de trabalho.

O Dataform executa todas as tabelas de desenvolvimento em esquemas que têm o mesmo sufixo, o que marca que elas foram criadas durante o desenvolvimento. O Dataform executa todas as tabelas de produção em esquemas sem qualquer sufixo.

A tabela a seguir mostra uma configuração que divide as tabelas de desenvolvimento e produção por esquema, com um esquema de desenvolvimento:

Configuração Desenvolvimento Produção
Projeto do Google Cloud enterprise-analytics enterprise-analytics
Ramificação Git nome do espaço de trabalho main
Substituições de compilação do espaço de trabalho sufixo do esquema: dev -
Configuração da versão - production
Configuração do fluxo de trabalho - production

Nesta solução, as tabelas de desenvolvimento e produção são armazenadas em um único projeto do Google Cloud.

Os desenvolvedores acionam a execução manualmente nos espaços de trabalho do Dataform. Em todas as execuções acionadas manualmente, o Dataform executa tabelas em esquemas com o mesmo sufixo, o que marca que elas foram criadas durante o desenvolvimento. Os desenvolvedores precisam saber que podem substituir as tabelas uns dos outros.

No Dataform, os desenvolvedores confirmam e enviam as alterações para as ramificações personalizadas do repositório remoto. Depois, na plataforma de hospedagem Git de terceiros, eles enviam solicitações de envio. A aprovação de uma solicitação de envio mescla as alterações na ramificação main do repositório remoto.

O Dataform compila automaticamente tabelas de produção da ramificação main do repositório remoto em um resultado de compilação de acordo com as configurações da versão production.

O Dataform executa automaticamente o resultado da compilação de production de acordo com a programação definida na configuração do fluxo de trabalho production.

Para implementar essa solução, defina as seguintes configurações do Dataform:

Configurações do fluxo de trabalho

Dependendo da sua versão do Dataform Core, as configurações do fluxo de trabalho são armazenadas em workflow_settings.yaml ou dataform.json. Para mais informações, consulte Definir as configurações de fluxo de trabalho do Dataform.

Em workflow_settings.yaml, defina as seguintes configurações:

defaultProject: enterprise-analytics
defaultDataset: analytics

Em dataform.json, defina as seguintes configurações:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-analytics"
}

Substituições do espaço de trabalho

Sufixo do esquema: "dev"

Configuração da versão

Commitish do Git: "main"

Para programar execuções de resultados de compilação do production, crie uma configuração de fluxo de trabalho.

Processo de desenvolvimento de amostra

Neste exemplo, os desenvolvedores Sasha e Kai trabalham no mesmo repositório do Dataform. O repositório do Dataform está conectado a um repositório Git remoto de terceiros.

Eles confirmam e enviam alterações para ramificações personalizadas no repositório remoto, chamadas sasha e kai.

A tabela a seguir mostra as configurações de ambiente aplicadas para Sasha, Kai e o ambiente de produção:

Configuração Sasha Kai Produção
Projeto do Google Cloud enterprise-analytics enterprise-analytics enterprise-analytics
Ramificação Git sasha kai main
Esquema analytics_dev analytics_dev analytics

Sasha cria uma nova tabela e a implanta na produção seguindo este processo:

  1. Em um espaço de trabalho do Dataform, Sasha cria a tabela user_stats.sqlx.
  2. No espaço de trabalho, Sasha aciona manualmente a execução da tabela.
  3. O Dataform cria a tabela enterprise-analytics.analytics_dev.user_stats no esquema analytics_dev do projeto enterprise-analytics do Google Cloud no BigQuery.
  4. No espaço de trabalho, Sasha confirma a alteração e a envia para a ramificação sasha no repositório Git remoto.
  5. No repositório remoto, Sasha envia uma solicitação de envio.
  6. No repositório remoto, Kai analisa e aprova a solicitação de envio, mesclando a alteração na ramificação main.
  7. O Dataform atualiza automaticamente o resultado da compilação na versão production na frequência especificada. Durante a próxima atualização do resultado da compilação production, o Dataform vai adicionar a tabela enterprise-analytics.analytics.user_stats ao resultado.
  8. Durante a execução programada de uma configuração de fluxo de trabalho, o Dataform executa a tabela enterprise-analytics.analytics.user_stats no esquema analytics no projeto enterprise-analytics do Google Cloud no BigQuery.
  9. A tabela user_stats.sqlx está disponível para usuários finais no esquema analytics no projeto enterprise-analytics do Google Cloud no BigQuery.

Dividir desenvolvimento e produção por esquema e projeto

Essa solução cria dois ambientes de execução: desenvolvimento e produção. Para dividir as tabelas de desenvolvimento e produção por esquema e projeto do Google Cloud, é preciso definir as configurações de fluxo de trabalho, as substituições de compilação do espaço de trabalho e uma configuração de versão. Para programar execuções de produção, crie uma configuração de fluxo de trabalho.

Nesta solução, o Dataform executa o desenvolvimento em um projeto de desenvolvimento dedicado do Google Cloud, em esquemas com um sufixo de esquema diferente para cada espaço de trabalho.

O Dataform executa todas as tabelas de produção no BigQuery em um projeto de produção dedicado do Google Cloud sem sufixo de esquema.

A tabela a seguir mostra uma configuração que divide as tabelas de desenvolvimento e produção por esquema e projeto do Google Cloud, com um esquema de desenvolvimento por espaço de trabalho do Dataform:

Configuração Desenvolvimento Produção
Projeto do Google Cloud enterprise-dev enterprise-prod
Ramificação Git nome do espaço de trabalho main
Substituições de compilação do espaço de trabalho sufixo do esquema: ${workspaceName} -
Configuração da versão - production
Configuração do fluxo de trabalho - production

Nesta solução, o Dataform executa tabelas de desenvolvimento e produção em diferentes esquemas e projetos do Google Cloud no BigQuery.

Os desenvolvedores acionam a execução manualmente nos espaços de trabalho do Dataform. Cada desenvolvedor trabalha no próprio espaço de trabalho dedicado, que recebe o nome dele, por exemplo, sasha.

Quando um desenvolvedor aciona a execução no espaço de trabalho, o Dataform anexa o nome do espaço de trabalho como o sufixo do esquema a todos os esquemas. Depois, o Dataform executa tabelas no esquema personalizado.

Por exemplo, o Dataform cria tabelas do espaço de trabalho sasha no esquema analytics_sasha do BigQuery. Dessa forma, cada desenvolvedor armazena as próprias tabelas de desenvolvimento nos próprios esquemas. Não há risco de substituir acidentalmente tabelas de outros desenvolvedores.

No Dataform, os desenvolvedores confirmam e enviam as alterações para as ramificações personalizadas do repositório remoto. Depois, na plataforma de hospedagem Git de terceiros, eles enviam solicitações de envio. A aprovação de uma solicitação de envio mescla as alterações na ramificação main do repositório remoto.

O Dataform compila automaticamente tabelas de produção da ramificação main do repositório remoto em um resultado de compilação de acordo com as configurações da versão production.

O Dataform executa automaticamente o resultado da compilação de production de acordo com a programação definida na configuração do fluxo de trabalho production.

Para implementar essa solução, defina as seguintes configurações do Dataform:

Configurações do fluxo de trabalho

Dependendo da sua versão do Dataform Core, as configurações do fluxo de trabalho são armazenadas em workflow_settings.yaml ou dataform.json. Para mais informações, consulte Definir as configurações de fluxo de trabalho do Dataform.

Em workflow_settings.yaml, defina as seguintes configurações:

defaultProject: enterprise-dev
defaultDataset: analytics

Em dataform.json, defina as seguintes configurações:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

Substituições do espaço de trabalho

Sufixo do esquema: "${workspaceName}"

Configuração da versão

  • Commitish do Git: "main"
  • ID do projeto do Google Cloud: "enterprise-prod"

Para programar execuções de resultados de compilação do production, crie uma configuração de fluxo de trabalho com uma programação personalizada que atenda às suas necessidades.

Processo de desenvolvimento de amostra

Neste exemplo, os desenvolvedores Sasha e Kai trabalham no mesmo repositório do Dataform. O repositório do Dataform está conectado a um repositório Git remoto de terceiros.

Sasha trabalha no espaço de trabalho dedicado chamado sasha, e Kai trabalha no espaço de trabalho dedicado chamado Kai. Eles confirmam e enviam alterações para ramificações personalizadas no repositório remoto, chamadas sasha e kai.

A tabela a seguir mostra as configurações de ambiente aplicadas para Sasha, Kai e o ambiente de produção:

Configuração Sasha Kai Produção
Projeto do Google Cloud enterprise-dev enterprise-dev enterprise-prod
Ramificação Git sasha kai main
Substituições de compilação do espaço de trabalho sufixo do esquema: ${workspaceName} sufixo do esquema: ${workspaceName} -
Configuração da versão - - production
Configuração do fluxo de trabalho - - production

Sasha cria uma nova tabela e a implanta na produção seguindo este processo:

  1. No espaço de trabalho sasha do Dataform, Sasha cria a tabela user_stats.sqlx.
  2. No espaço de trabalho sasha, Sasha aciona manualmente a execução da tabela.
  3. O Dataform executa a tabela enterprise-dev.analytics_sasha.user_stats no esquema analytics_sasha do projeto enterprise-dev do Google Cloud no BigQuery.
  4. No espaço de trabalho sasha, Sasha confirma a alteração e a envia para a ramificação sasha no repositório Git remoto.
  5. No repositório remoto, Sasha envia uma solicitação de envio.
  6. No repositório remoto, Kai analisa e aprova a solicitação de envio, mesclando a alteração na ramificação main.
  7. O Dataform atualiza automaticamente o resultado da compilação na versão production na frequência especificada. Durante a próxima atualização do resultado da compilação production, o Dataform vai adicionar a tabela enterprise-prod.analytics.user_stats ao resultado.
  8. Durante a execução programada de uma configuração de fluxo de trabalho, o Dataform executa a tabela enterprise-prod.analytics.user_stats no esquema analytics no projeto enterprise-prod do Google Cloud no BigQuery.
  9. A tabela user_stats.sqlx está disponível para usuários finais no esquema analytics no projeto enterprise-prod do Google Cloud no BigQuery.

Dividir desenvolvimento, preparo e produção por esquema e projeto

Esta solução cria três ambientes de execução: desenvolvimento, preparação e produção. Todos os ambientes são divididos por projeto do Google Cloud. Além disso, o desenvolvimento é dividido do preparo e da produção por esquema.

Para dividir as tabelas de desenvolvimento, preparo e produção por esquema e projeto do Google Cloud, é preciso definir as configurações do fluxo de trabalho, as substituições de compilação do espaço de trabalho e as duas configurações da versão. Para programar execuções de preparo e produção, é preciso criar duas configurações de fluxo de trabalho separadas.

Nesta solução, o Dataform executa tabelas de desenvolvimento no BigQuery em vários esquemas de desenvolvimento, um por espaço de trabalho do Dataform, em um projeto de desenvolvimento dedicado do Google Cloud.

O Dataform executa todas as tabelas de preparo no BigQuery em um projeto de preparo dedicado do Google Cloud em esquemas que têm o mesmo sufixo, marcando que eles foram criados no preparo.

O Dataform executa todas as tabelas de produção no BigQuery em um projeto de produção dedicado do Google Cloud em esquemas com o mesmo sufixo, o que marca que eles foram criados na produção.

Veja na tabela a seguir um exemplo de configuração que divide as tabelas de desenvolvimento, preparo e produção por esquema e projeto do Google Cloud, com um esquema de desenvolvimento por espaço de trabalho do Dataform:

Configuração Desenvolvimento Teste Produção
Projeto do Google Cloud enterprise-dev enterprise-staging enterprise-prod
Ramificação Git nome do espaço de trabalho main prod
Substituições de compilação do espaço de trabalho sufixo do esquema: ${workspaceName} - -
Configuração da versão - staging production
Configuração do fluxo de trabalho - staging production

Nesta solução, o Dataform executa tabelas de desenvolvimento, preparo e produção em diferentes projetos do Google Cloud no BigQuery. Além disso, o Dataform executa tabelas de desenvolvimento em vários esquemas personalizados, um por espaço de trabalho. O Dataform executa tabelas de preparo e produção no mesmo esquema, mas em projetos diferentes do Google Cloud.

Os desenvolvedores acionam a execução manualmente nos espaços de trabalho do Dataform. Cada desenvolvedor trabalha no próprio espaço de trabalho dedicado, que recebe o nome dele, por exemplo, sasha.

Cada espaço de trabalho corresponde a um esquema personalizado do BigQuery, nomeado de acordo com o espaço de trabalho. Quando um desenvolvedor aciona a execução no espaço de trabalho, o Dataform anexa o nome do espaço de trabalho como o sufixo do esquema ao esquema padrão. Depois, o Dataform executa tabelas no esquema personalizado do BigQuery.

Por exemplo, o Dataform executa tabelas do espaço de trabalho sasha no esquema analytics_sasha do BigQuery. Dessa forma, cada desenvolvedor armazena as próprias tabelas de desenvolvimento no próprio esquema. Não há risco de substituir acidentalmente tabelas de outros desenvolvedores.

No Dataform, os desenvolvedores confirmam e enviam as alterações para as ramificações personalizadas do repositório remoto. Depois, na plataforma de hospedagem de terceiros do Git, eles enviam solicitações de envio para a ramificação main. A aprovação de uma solicitação de envio mescla as alterações na ramificação main do repositório remoto.

O Dataform compila automaticamente as tabelas de preparo da ramificação main do repositório remoto em um resultado de compilação de acordo com as configurações da versão staging.

O Dataform executa automaticamente o resultado da compilação de staging de acordo com a programação definida na configuração do fluxo de trabalho staging.

Para promover tabelas do preparo à produção, na plataforma de hospedagem de terceiros do Git, os desenvolvedores enviam solicitações de envio da ramificação main para a ramificação prod. A aprovação de uma solicitação de envio mescla as alterações na ramificação prod do repositório remoto.

O Dataform compila automaticamente tabelas de produção da ramificação prod do repositório remoto em um resultado de compilação de acordo com as configurações da versão production.

O Dataform executa automaticamente o resultado da compilação de production de acordo com a programação definida na configuração do fluxo de trabalho production.

Para implementar essa solução, defina as seguintes configurações do Dataform:

Configurações do fluxo de trabalho

Dependendo da sua versão do Dataform Core, as configurações do fluxo de trabalho são armazenadas em workflow_settings.yaml ou dataform.json. Para mais informações, consulte Definir as configurações de fluxo de trabalho do Dataform.

Em workflow_settings.yaml, defina as seguintes configurações:

defaultProject: enterprise-dev
defaultDataset: analytics

Em dataform.json, defina as seguintes configurações:

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

Substituições do espaço de trabalho

Sufixo do esquema: "${workspaceName}"

Configuração de versão do staging

  • Commitish do Git: "main"
  • ID do projeto do Google Cloud: "enterprise-staging"

Configuração de versão do prod

  • Commitish do Git: "prod"
  • ID do projeto do Google Cloud: "enterprise-prod"

Para programar execuções dos resultados de compilação de staging e production, crie duas configurações de fluxo de trabalho separadas com programações personalizadas que melhor atendam às suas necessidades.

Processo de desenvolvimento de amostra

Neste exemplo, os desenvolvedores Sasha e Kai trabalham no mesmo repositório do Dataform. O repositório do Dataform está conectado a um repositório Git remoto de terceiros.

Sasha trabalha no espaço de trabalho dedicado chamado sasha, e Kai trabalha no espaço de trabalho dedicado chamado Kai. Eles confirmam e enviam alterações para ramificações personalizadas no repositório remoto, chamadas sasha e kai.

A tabela a seguir mostra as configurações de ambiente aplicadas para Sasha, Kai e o ambiente de produção:

Configuração Sasha Kai Teste Produção
Projeto do Google Cloud enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Ramificação Git sasha kai main prod
Esquema analytics_sasha analytics_kai analytics analytics

Sasha cria uma nova tabela e a implanta na produção seguindo este processo:

  1. No espaço de trabalho sasha do Dataform, Sasha cria a tabela user_stats.sqlx.
  2. No espaço de trabalho sasha, Sasha aciona manualmente a execução da tabela.
  3. O Dataform executa a tabela enterprise-dev.analytics_sasha.user_stats no esquema analytics_sasha do projeto enterprise-dev do Google Cloud no BigQuery.
  4. No espaço de trabalho sasha, Sasha confirma a alteração e a envia para a ramificação sasha no repositório Git remoto.
  5. No repositório remoto, Sasha envia uma solicitação de envio para a ramificação main.
  6. No repositório remoto, Kai analisa e aprova a solicitação de envio, mesclando a alteração na ramificação main.
  7. O Dataform atualiza automaticamente o resultado da compilação na versão staging na frequência especificada. Durante a próxima atualização do resultado da compilação staging, o Dataform vai adicionar a tabela enterprise-staging.analytics.user_stats ao resultado.
  8. Durante a execução programada de uma configuração de fluxo de trabalho, o Dataform executa a tabela enterprise-staging.analytics.user_stats no esquema analytics no projeto enterprise-staging do Google Cloud no BigQuery.
  9. No repositório remoto, Sasha envia uma solicitação de envio para a ramificação prod.
  10. No repositório remoto, Kai analisa e aprova a solicitação de envio, mesclando a alteração na ramificação prod.
  11. O Dataform atualiza automaticamente o resultado da compilação na versão production na frequência especificada. Durante a próxima atualização do resultado da compilação production, o Dataform vai adicionar a tabela enterprise-prod.analytics.user_stats ao resultado.
  12. Durante uma execução programada de uma configuração de fluxo de trabalho, o Dataform executa a tabela enterprise-prod.analytics.user_stats no esquema analytics no projeto enterprise-prod do Google Cloud no BigQuery.
  13. A tabela user_stats.sqlx está disponível para usuários finais no esquema analytics no projeto enterprise-prod do Google Cloud no BigQuery.

A seguir