Gerenciar o ciclo de vida do código

Este documento descreve as práticas recomendadas para gerenciar o ciclo de vida do código no Dataform: criar ambientes de desenvolvimento, de pré-produção e de produção e configurar as 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 das tabelas disponíveis para os usuários finais.

  • Configure as configurações de lançamento e fluxo de trabalho para executar fluxos de trabalho em um ambiente de produção e, opcionalmente, em um ambiente de pré-produção.

Este documento descreve soluções para isolar tabelas de desenvolvimento com substituições de compilação do espaço de trabalho e configuração de ambientes de teste e de produção configurações de lançamento e configurações de fluxo de trabalho.

Com essas soluções, é possível criar ambientes de execução em um único repositório do Dataform e um projeto do Google Cloud. Você pode ter várias cópias de um repositório do Dataform, armazenadas em um projeto do Google Cloud diferente, com cada projeto correspondendo a um estágio do ciclo de vida do código, por exemplo, desenvolvimento, preparação e produção. Essa abordagem permite personalizar as permissões do Identity and Access Management em cada fase do ciclo de vida do código.

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

Recomendamos que você isole as tabelas criadas durante as execuções de 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 que eles acessem dados incorretos por acidente.

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

Dividir as tabelas de desenvolvimento e produção por esquema
Recomendado para pequenas equipes. 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 as 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 dedicado do Google Cloud. Cada desenvolvedor do Dataform tem um esquema exclusivo para tabelas de desenvolvimento. Essa solução elimina o risco de os desenvolvedores substituírem acidentalmente as tabelas de desenvolvimento uns dos outros. A desvantagem dessa abordagem é que excluir tabelas e esquemas de desenvolvimento e recriar todas as tabelas em cada ambiente pode levar mais tempo.
Separar as tabelas de desenvolvimento, preparação e produção por projeto do Google Cloud
Recomendado para equipes grandes ou que exigem um ambiente de preparação. O Dataform executa tabelas de cada ambiente em um projeto dedicado do Google Cloud no BigQuery. Essa solução oferece o 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 nos espaços de trabalho do Dataform. O Dataform compila automaticamente as tabelas de produção e de preparação em uma configuração de lançamento e as executa na frequência definida em uma configuração de fluxo de trabalho.

Separar o desenvolvimento e a produção por esquema

Essa solução cria dois ambientes de execução em que o Dataform executa seus fluxos de trabalho SQL: desenvolvimento e produção. Para dividir as tabelas de desenvolvimento e de produção por esquema, é necessário configurar 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, é necessário criar 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 sufixo.

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

Configuração Desenvolvimento Produção
Projeto do Google Cloud enterprise-analytics enterprise-analytics
Ramificação do 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 de 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. Em seguida, na plataforma de hospedagem de Git de terceiros, eles enviam solicitações pull. A aprovação de uma solicitação de envio mescla as mudanças na ramificação main do repositório remoto.

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

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

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

Configurações do fluxo de trabalho

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

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

defaultProject: enterprise-analytics
defaultDataset: analytics

Em dataform.json, configure 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 production, crie uma configuração de fluxo de trabalho.

Exemplo de processo de desenvolvimento

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 as alterações para as ramificações personalizadas no repositório remoto, chamadas de 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 do Git sasha kai main
Esquema analytics_dev analytics_dev analytics

Sasha cria uma nova tabela e a implanta na produção no seguinte processo:

  1. Em um espaço de trabalho do Dataform, Sasha cria a tabela user_stats.
  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 no 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 mudança 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 adiciona a tabela enterprise-analytics.analytics.user_stats ao resultado da compilação.
  8. Durante uma 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 está disponível para usuários finais no esquema analytics do projeto enterprise-analytics do Google Cloud no BigQuery.

Dividir o desenvolvimento e a 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, é necessário configurar as configurações do fluxo de trabalho, as substituições de compilação do espaço de trabalho e uma configuração de lançamento. Para programar execuções de produção, é necessário criar 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 diferente para cada espaço de trabalho.

O Dataform executa todas as tabelas de produção no BigQuery, 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 do 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 espaço de trabalho dedicado, com 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. Em seguida, o Dataform executa tabelas no esquema personalizado.

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

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

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

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

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

Configurações do fluxo de trabalho

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

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

defaultProject: enterprise-dev
defaultDataset: analytics

Em dataform.json, configure 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 de production, crie uma configuração de fluxo de trabalho com uma programação personalizada que atenda melhor às suas necessidades.

Exemplo de processo de desenvolvimento

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 as alterações para as ramificações personalizadas no repositório remoto, chamadas de 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 do 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 no seguinte processo:

  1. No espaço de trabalho do Dataform sasha, Sasha cria a tabela user_stats.
  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 no 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 mudança 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 adiciona a tabela enterprise-prod.analytics.user_stats ao resultado da compilação.
  8. 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.
  9. A tabela user_stats está disponível para usuários finais no esquema analytics do projeto enterprise-prod do Google Cloud no BigQuery.

Separar o desenvolvimento, o preparo e a produção por esquema e projeto

Essa 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 em preparação e produção por esquema.

Para dividir as tabelas de desenvolvimento, de preparação e de produção por esquema e projeto do Google Cloud, você precisa configurar as configurações do fluxo de trabalho, as substituições de compilação do espaço de trabalho e duas configurações de lançamento. Para programar execuções de preparação e produção, é necessário 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 com o mesmo sufixo, o que marca que elas foram criadas 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 elas foram criadas na produção.

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

Configuração Desenvolvimento Preparo Produção
Projeto do Google Cloud enterprise-dev enterprise-staging enterprise-prod
Ramificação do 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, orquestração 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 preparação 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 espaço de trabalho dedicado, com o nome dele, por exemplo, sasha.

Cada espaço de trabalho corresponde a um esquema personalizado do BigQuery, com o mesmo nome. 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. Em seguida, o Dataform executa tabelas no esquema personalizado no BigQuery.

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

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

O Dataform compila automaticamente as tabelas de preparação da filial main do repositório remoto em um resultado de compilação de acordo com as configurações de lançamento staging.

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

Para promover tabelas do ambiente de teste para a produção, na plataforma de hospedagem de Git de terceiros, 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 mudanças na ramificação prod do repositório remoto.

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

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

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

Configurações do fluxo de trabalho

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

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

defaultProject: enterprise-dev
defaultDataset: analytics

Em dataform.json, configure 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 staging

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

Configuração de versão prod

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

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

Exemplo de processo de desenvolvimento

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 as alterações para as ramificações personalizadas no repositório remoto, chamadas de 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 Preparo Produção
Projeto do Google Cloud enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Ramificação do Git sasha kai main prod
Esquema analytics_sasha analytics_kai analytics analytics

Sasha cria uma nova tabela e a implanta na produção no seguinte processo:

  1. No espaço de trabalho do Dataform sasha, Sasha cria a tabela user_stats.
  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 no 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 mudança 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 adiciona a tabela enterprise-staging.analytics.user_stats ao resultado da compilação.
  8. Durante uma 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 mudança 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 adiciona a tabela enterprise-prod.analytics.user_stats ao resultado da compilação.
  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 está disponível para usuários finais no esquema analytics do projeto enterprise-prod do Google Cloud no BigQuery.

A seguir