Cómo administrar el ciclo de vida del código

En este documento, se describen las prácticas recomendadas para administrar el ciclo de vida del código en Dataform: crear entornos de desarrollo, pruebas y producción, y configurar la configuración de compilación y ejecución para cada entorno.

Para crear un ciclo de vida estandarizado de flujos de trabajo de SQL de Dataform que mantenga la higiene de los datos y optimice los procesos de desarrollo, te recomendamos que hagas lo siguiente:

  • Crea entornos de ejecución para aislar las tablas creadas durante el desarrollo de las tablas disponibles para los usuarios finales.

  • Configura la configuración de lanzamiento y flujo de trabajo para ejecutar flujos de trabajo en un entorno de producción y, de manera opcional, en un entorno de pruebas.

En este documento, se describen soluciones para aislar las tablas de desarrollo con anulaciones de compilación de lugares de trabajo y configurar entornos de pruebas y producción parámetros de configuración de lanzamiento y parámetros de configuración de flujo de trabajo.

Estas soluciones te permiten crear entornos de ejecución dentro de un solo repositorio de Dataform y un proyecto de Google Cloud. Puedes optar por tener varias copias de un repositorio de Dataform, alojadas en diferentes proyectos de Google Cloud, cada uno de los cuales corresponde a una etapa del ciclo de vida de tu código, por ejemplo, desarrollo, etapa de pruebas y producción. Este enfoque te permite personalizar los permisos de Identity and Access Management en cada etapa del ciclo de vida de tu código.

Prácticas recomendadas para entornos de ejecución aislados

Te recomendamos que aísles las tablas creadas durante las ejecuciones del flujo de trabajo de SQL de desarrollo de las tablas de producción en BigQuery. Esto garantiza que los usuarios finales puedan navegar a las tablas de producción y elimina el riesgo de que accedan a datos incorrectos por accidente.

Puedes crear entornos de ejecución aislados de las siguientes maneras:

Cómo dividir las tablas de desarrollo y producción por esquema
Se recomienda para equipos pequeños. Dataform crea tablas de desarrollo y producción en diferentes esquemas en BigQuery. Dataform ejecuta todas las tablas de desarrollo en esquemas que tienen el mismo sufijo, lo que marca que se crearon durante el desarrollo. Los desarrolladores pueden reemplazar las tablas de desarrollo de los demás.
Cómo dividir las tablas de desarrollo y producción por esquema y proyecto de Google Cloud
Se recomienda para equipos de tamaño mediano. Dataform crea tablas de desarrollo y producción en diferentes esquemas y proyectos en BigQuery. Dataform publicó todas las tablas de desarrollo en un proyecto de Google Cloud de desarrollo exclusivo. Cada desarrollador de Dataform tiene su propio esquema único para las tablas de desarrollo. Esta solución elimina el riesgo de que los desarrolladores reemplacen accidentalmente las tablas de desarrollo de los demás. La desventaja de este enfoque es que borrar las tablas y los esquemas de desarrollo, y volver a crear todas las tablas en cada entorno puede requerir más tiempo.
Cómo dividir las tablas de desarrollo, etapa de pruebas y producción por proyecto de Google Cloud
Se recomienda para equipos grandes o que requieren un entorno de pruebas. Dataform ejecuta tablas de cada entorno en un proyecto de Google Cloud dedicado en BigQuery. Esta solución te brinda el control más completo sobre el ciclo de vida del código.

Todas las soluciones requieren un solo repositorio de Dataform conectado a un solo repositorio remoto de terceros.

En todas las soluciones, los desarrolladores activan de forma manual las ejecuciones de las tablas de desarrollo dentro de sus espacios de trabajo de Dataform. Dataform compila automáticamente las tablas de producción y de etapa de pruebas en una configuración de lanzamiento y las ejecuta con la frecuencia establecida en una configuración de flujo de trabajo.

Cómo dividir el desarrollo y la producción por esquema

Esta solución crea dos entornos de ejecución en los que Dataform ejecuta tus flujos de trabajo de SQL: desarrollo y producción. Para dividir las tablas de desarrollo y producción por esquema, debes configurar la configuración del flujo de trabajo, las anulaciones de compilación del lugar de trabajo y una configuración de lanzamiento. Para programar ejecuciones de producción, debes crear una configuración de flujo de trabajo.

Dataform ejecuta todas las tablas de desarrollo en esquemas que tienen el mismo sufijo, lo que marca que se crearon durante el desarrollo. Dataform ejecuta todas las tablas de producción en esquemas sin ningún sufijo.

En la siguiente tabla, se muestra una configuración que divide las tablas de desarrollo y producción por esquema, con un esquema de desarrollo:

Configuración Desarrollo Producción
Proyecto de Google Cloud enterprise-analytics enterprise-analytics
Rama de Git nombre del espacio de trabajo main
Anulaciones de compilación de lugares de trabajo Sufijo de esquema: dev -
Configuración de lanzamiento - production
Configuración del flujo de trabajo - production

En esta solución, las tablas de desarrollo y producción se almacenan en un solo proyecto de Google Cloud.

Los desarrolladores activan la ejecución de forma manual en sus lugares de trabajo de Dataform. En todas las ejecuciones activadas de forma manual, Dataform ejecuta tablas en esquemas que tienen el mismo sufijo, lo que marca que se crearon durante el desarrollo. Los desarrolladores deben tener en cuenta que pueden reemplazar las tablas de los demás.

En Dataform, los desarrolladores confirman y envían sus cambios a sus ramas personalizadas del repositorio remoto. Luego, en la plataforma de alojamiento de Git de terceros, envían solicitudes de extracción. La aprobación de una solicitud de extracción combina los cambios en la rama main del repositorio remoto.

Dataform compila automáticamente las tablas de producción de la rama main del repositorio remoto en un resultado de compilación según la configuración de la configuración de lanzamiento production.

Dataform ejecuta automáticamente el resultado de la compilación de production según el programa establecido en la configuración del flujo de trabajo de production.

Para implementar esta solución, configura la siguiente configuración de Dataform:

Configuración del flujo de trabajo

Según la versión de Dataform Core, la configuración del flujo de trabajo se almacena en workflow_settings.yaml o dataform.json. Para obtener más información, consulta Configura la configuración del flujo de trabajo de Dataform.

En workflow_settings.yaml, configura lo siguiente:

defaultProject: enterprise-analytics
defaultDataset: analytics

En dataform.json, configura los siguientes parámetros:

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

Anulaciones de Workspace

Sufijo de esquema: "dev"

Configuración de lanzamiento

Commitish de Git: "main"

Para programar ejecuciones de los resultados de compilación de production, crea una configuración de flujo de trabajo.

Ejemplo de proceso de desarrollo

En este ejemplo, los desarrolladores Sasha y Kai trabajan en el mismo repositorio de Dataform. El repositorio de Dataform está conectado a un repositorio de Git remoto de terceros.

Confirman y envían cambios a ramas personalizadas en el repositorio remoto, llamadas sasha y kai.

En la siguiente tabla, se muestra la configuración de entorno aplicada para Sasha, Kai y el entorno de producción:

Configuración Sasha Kai Producción
Proyecto de Google Cloud enterprise-analytics enterprise-analytics enterprise-analytics
Rama de Git sasha kai main
Esquema analytics_dev analytics_dev analytics

Sasha crea una tabla nueva y la implementa en producción en el siguiente proceso:

  1. En un espacio de trabajo de Dataform, Sasha crea la tabla user_stats.
  2. En el lugar de trabajo, Sasha activa manualmente la ejecución de la tabla.
  3. Dataform crea la tabla enterprise-analytics.analytics_dev.user_stats en el esquema analytics_dev del proyecto enterprise-analytics de Google Cloud en BigQuery.
  4. En el espacio de trabajo, Sasha confirma el cambio y lo envía a la rama sasha en el repositorio remoto de Git.
  5. En el repositorio remoto, Sasha envía una solicitud de extracción.
  6. En el repositorio remoto, Kai revisa y aprueba la solicitud de extracción, y combina el cambio en la rama main.
  7. Dataform actualiza automáticamente el resultado de la compilación en la versión de production con la frecuencia especificada. Durante la próxima actualización del resultado de compilación de production, Dataform agrega la tabla enterprise-analytics.analytics.user_stats al resultado de compilación.
  8. Durante una ejecución programada de una configuración de flujo de trabajo, Dataform ejecuta la tabla enterprise-analytics.analytics.user_stats en el esquema analytics del proyecto enterprise-analytics de Google Cloud en BigQuery.
  9. La tabla user_stats está disponible para los usuarios finales en el esquema analytics del proyecto enterprise-analytics de Google Cloud en BigQuery.

Cómo dividir el desarrollo y la producción por esquema y proyecto

Esta solución crea dos entornos de ejecución: desarrollo y producción. Para dividir las tablas de desarrollo y producción por esquema y proyecto de Google Cloud, debes configurar la configuración del flujo de trabajo, las anulaciones de compilación del lugar de trabajo y una configuración de lanzamiento. Para programar ejecuciones de producción, debes crear una configuración de flujo de trabajo.

En esta solución, Dataform ejecuta el desarrollo en un proyecto de Google Cloud de desarrollo exclusivo, en esquemas con un sufijo de esquema diferente para cada lugar de trabajo.

Dataform ejecuta todas las tablas de producción en BigQuery, un proyecto de producción dedicado de Google Cloud sin sufijo de esquema.

En la siguiente tabla, se muestra una configuración que divide las tablas de desarrollo y producción por esquema y proyecto de Google Cloud, con un esquema de desarrollo por lugar de trabajo de Dataform:

Configuración Desarrollo Producción
Proyecto de Google Cloud enterprise-dev enterprise-prod
Rama de Git nombre del espacio de trabajo main
Anulaciones de compilación de lugares de trabajo Sufijo de esquema: ${workspaceName} -
Configuración de lanzamiento - production
Configuración del flujo de trabajo - production

En esta solución, Dataform ejecuta tablas de desarrollo y producción en diferentes esquemas y proyectos de Google Cloud en BigQuery.

Los desarrolladores activan la ejecución de forma manual en sus lugares de trabajo de Dataform. Cada desarrollador trabaja en su lugar de trabajo dedicado, que lleva su nombre, por ejemplo, sasha.

Cuando un desarrollador activa la ejecución en su lugar de trabajo, Dataform agrega el nombre del lugar de trabajo como sufijo del esquema a todos los esquemas. Luego, Dataform ejecuta las tablas en el esquema personalizado.

Por ejemplo, Dataform crea tablas a partir del lugar de trabajo sasha en el esquema analytics_sasha en BigQuery. De esta manera, cada desarrollador almacena sus tablas de desarrollo en sus propios esquemas. No hay riesgo de reemplazar por accidente las tablas de otros desarrolladores.

En Dataform, los desarrolladores confirman y envían sus cambios a sus ramas personalizadas del repositorio remoto. Luego, en la plataforma de alojamiento de Git de terceros, envían solicitudes de extracción. La aprobación de una solicitud de extracción combina los cambios en la rama main del repositorio remoto.

Dataform compila automáticamente las tablas de producción de la rama main del repositorio remoto en un resultado de compilación según la configuración de la configuración de lanzamiento production.

Dataform ejecuta automáticamente el resultado de la compilación de production según el programa establecido en la configuración del flujo de trabajo de production.

Para implementar esta solución, configura la siguiente configuración de Dataform:

Configuración del flujo de trabajo

Según la versión de Dataform Core, la configuración del flujo de trabajo se almacena en workflow_settings.yaml o dataform.json. Para obtener más información, consulta Configura la configuración del flujo de trabajo de Dataform.

En workflow_settings.yaml, configura los siguientes parámetros:

defaultProject: enterprise-dev
defaultDataset: analytics

En dataform.json, configura los siguientes parámetros:

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

Anulaciones de Workspace

Sufijo de esquema: "${workspaceName}"

Configuración de lanzamiento

  • Commitish de Git: "main"
  • ID del proyecto de Google Cloud: "enterprise-prod"

Para programar ejecuciones de los resultados de compilación de production, crea una configuración de flujo de trabajo con un programa personalizado que se adapte mejor a tus necesidades.

Ejemplo de proceso de desarrollo

En este ejemplo, los desarrolladores Sasha y Kai trabajan en el mismo repositorio de Dataform. El repositorio de Dataform está conectado a un repositorio de Git remoto de terceros.

Sasha trabaja en su lugar de trabajo exclusivo llamado sasha y Kai trabaja en su lugar de trabajo exclusivo llamado Kai. Confirman y envían cambios a ramas personalizadas en el repositorio remoto, llamadas sasha y kai.

En la siguiente tabla, se muestra la configuración de entorno aplicada para Sasha, Kai y el entorno de producción:

Configuración Sasha Kai Producción
Proyecto de Google Cloud enterprise-dev enterprise-dev enterprise-prod
Rama de Git sasha kai main
Anulaciones de compilación de lugares de trabajo Sufijo de esquema: ${workspaceName} Sufijo de esquema: ${workspaceName} -
Configuración de lanzamiento - - production
Configuración del flujo de trabajo - - production

Sasha crea una tabla nueva y la implementa en producción en el siguiente proceso:

  1. En el espacio de trabajo de Dataform sasha, Sasha crea la tabla user_stats.
  2. En el espacio de trabajo sasha, Sasha activa manualmente la ejecución de la tabla.
  3. Dataform ejecuta la tabla enterprise-dev.analytics_sasha.user_stats en el esquema analytics_sasha del proyecto enterprise-dev de Google Cloud en BigQuery.
  4. En el espacio de trabajo sasha, Sasha confirma el cambio y lo envía a la rama sasha en el repositorio remoto de Git.
  5. En el repositorio remoto, Sasha envía una solicitud de extracción.
  6. En el repositorio remoto, Kai revisa y aprueba la solicitud de extracción, y combina el cambio en la rama main.
  7. Dataform actualiza automáticamente el resultado de la compilación en la versión de production con la frecuencia especificada. Durante la próxima actualización del resultado de compilación de production, Dataform agrega la tabla enterprise-prod.analytics.user_stats al resultado de compilación.
  8. Durante una ejecución programada de una configuración de flujo de trabajo, Dataform ejecuta la tabla enterprise-prod.analytics.user_stats en el esquema analytics del proyecto enterprise-prod de Google Cloud en BigQuery.
  9. La tabla user_stats está disponible para los usuarios finales en el esquema analytics del proyecto enterprise-prod de Google Cloud en BigQuery.

Divide el desarrollo, la etapa de pruebas y la producción por esquema y proyecto

Esta solución crea tres entornos de ejecución: desarrollo, etapa de pruebas y producción. Todos los entornos se dividen por proyecto de Google Cloud. Además, el desarrollo se divide en la etapa de pruebas y producción por esquema.

Para dividir las tablas de desarrollo, pruebas y producción por esquema y proyecto de Google Cloud, debes configurar la configuración del flujo de trabajo, las anulaciones de compilación del lugar de trabajo y dos configuraciones de lanzamiento. Para programar ejecuciones de etapa de pruebas y producción, debes crear dos configuraciones de flujo de trabajo independientes.

En esta solución, Dataform ejecuta tablas de desarrollo en BigQuery en varios esquemas de desarrollo, uno por lugar de trabajo de Dataform, en un proyecto de Google Cloud de desarrollo exclusivo.

Dataform ejecuta todas las tablas de etapa de pruebas en BigQuery en un proyecto de Google Cloud de etapa de pruebas dedicado en esquemas que tienen el mismo sufijo, lo que marca que se crearon en la etapa de pruebas.

Dataform ejecuta todas las tablas de producción en BigQuery en un proyecto de Google Cloud de producción dedicado en esquemas que tienen el mismo sufijo, lo que marca que se crearon en producción.

En la siguiente tabla, se muestra un ejemplo de configuración que divide las tablas de desarrollo, pruebas y producción por esquema y proyecto de Google Cloud, con un esquema de desarrollo por cada espacio de trabajo de Dataform:

Configuración Desarrollo Etapa de pruebas Producción
Proyecto de Google Cloud enterprise-dev enterprise-staging enterprise-prod
Rama de Git nombre del espacio de trabajo main prod
Anulaciones de compilación de lugares de trabajo Sufijo de esquema: ${workspaceName} - -
Configuración de lanzamiento - staging production
Configuración del flujo de trabajo - staging production

En esta solución, Dataform ejecuta tablas de desarrollo, pruebas y producción en diferentes proyectos de Google Cloud en BigQuery. Además, Dataform ejecuta tablas de desarrollo en varios esquemas personalizados, uno por espacio de trabajo. Dataform ejecuta las tablas de preparación y producción en el mismo esquema, pero en diferentes proyectos de Google Cloud.

Los desarrolladores activan la ejecución de forma manual en sus lugares de trabajo de Dataform. Cada desarrollador trabaja en su lugar de trabajo dedicado, que lleva su nombre, por ejemplo, sasha.

Cada espacio de trabajo corresponde a un esquema de BigQuery personalizado, que se nombra según el espacio de trabajo. Cuando un desarrollador activa la ejecución en su lugar de trabajo, Dataform agrega el nombre del lugar de trabajo como sufijo del esquema al esquema predeterminado. Luego, Dataform ejecuta tablas en el esquema personalizado en BigQuery.

Por ejemplo, Dataform ejecuta tablas del lugar de trabajo sasha en el esquema analytics_sasha en BigQuery. De esta manera, cada desarrollador almacena sus tablas de desarrollo en su propio esquema. No hay riesgo de reemplazar por accidente las tablas de otros desarrolladores.

En Dataform, los desarrolladores confirman y envían sus cambios a sus ramas personalizadas del repositorio remoto. Luego, en la plataforma de alojamiento de Git de terceros, envía solicitudes de extracción a la rama main. La aprobación de una solicitud de extracción combina los cambios en la rama main del repositorio remoto.

Dataform compila automáticamente las tablas de preparación de la rama main del repositorio remoto en un resultado de compilación según la configuración de lanzamiento de staging.

Dataform ejecuta automáticamente el resultado de la compilación de staging según el programa establecido en la configuración del flujo de trabajo de staging.

Para ascender tablas de la etapa de pruebas a producción, en la plataforma de alojamiento de Git de terceros, los desarrolladores envían solicitudes de extracción de la rama main a la rama prod. La aprobación de una solicitud de extracción combina los cambios en la rama prod del repositorio remoto.

Dataform compila automáticamente las tablas de producción de la rama prod del repositorio remoto en un resultado de compilación según la configuración de la configuración de lanzamiento production.

Dataform ejecuta automáticamente el resultado de la compilación de production según el programa establecido en la configuración del flujo de trabajo de production.

Para implementar esta solución, configura la siguiente configuración de Dataform:

Configuración del flujo de trabajo

Según la versión de Dataform Core, la configuración del flujo de trabajo se almacena en workflow_settings.yaml o dataform.json. Para obtener más información, consulta Configura la configuración del flujo de trabajo de Dataform.

En workflow_settings.yaml, configura los siguientes parámetros:

defaultProject: enterprise-dev
defaultDataset: analytics

En dataform.json, configura los siguientes parámetros:

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

Anulaciones de Workspace

Sufijo de esquema: "${workspaceName}"

Configuración de lanzamiento de staging

  • Commitish de Git: "main"
  • ID del proyecto de Google Cloud: "enterprise-staging"

Configuración de lanzamiento de prod

  • Commitish de Git: "prod"
  • ID del proyecto de Google Cloud: "enterprise-prod"

Para programar ejecuciones de los resultados de compilación de staging y production, crea dos configuraciones de flujo de trabajo separadas con programas personalizados que se adapten mejor a tus necesidades.

Ejemplo de proceso de desarrollo

En este ejemplo, los desarrolladores Sasha y Kai trabajan en el mismo repositorio de Dataform. El repositorio de Dataform está conectado a un repositorio de Git remoto de terceros.

Sasha trabaja en su lugar de trabajo exclusivo llamado sasha y Kai trabaja en su lugar de trabajo exclusivo llamado Kai. Confirman y envían cambios a ramas personalizadas en el repositorio remoto, llamadas sasha y kai.

En la siguiente tabla, se muestra la configuración de entorno aplicada para Sasha, Kai y el entorno de producción:

Configuración Sasha Kai Etapa de pruebas Producción
Proyecto de Google Cloud enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Rama de Git sasha kai main prod
Esquema analytics_sasha analytics_kai analytics analytics

Sasha crea una tabla nueva y la implementa en producción en el siguiente proceso:

  1. En el espacio de trabajo de Dataform sasha, Sasha crea la tabla user_stats.
  2. En el espacio de trabajo sasha, Sasha activa manualmente la ejecución de la tabla.
  3. Dataform ejecuta la tabla enterprise-dev.analytics_sasha.user_stats en el esquema analytics_sasha del proyecto enterprise-dev de Google Cloud en BigQuery.
  4. En el espacio de trabajo sasha, Sasha confirma el cambio y lo envía a la rama sasha en el repositorio remoto de Git.
  5. En el repositorio remoto, Sascha envía una solicitud de extracción a la rama main.
  6. En el repositorio remoto, Kai revisa y aprueba la solicitud de extracción, y combina el cambio en la rama main.
  7. Dataform actualiza automáticamente el resultado de la compilación en la versión de staging con la frecuencia especificada. Durante la próxima actualización del resultado de compilación de staging, Dataform agrega la tabla enterprise-staging.analytics.user_stats al resultado de compilación.
  8. Durante una ejecución programada de una configuración de flujo de trabajo, Dataform ejecuta la tabla enterprise-staging.analytics.user_stats en el esquema analytics del proyecto enterprise-staging de Google Cloud en BigQuery.
  9. En el repositorio remoto, Sascha envía una solicitud de extracción a la rama prod.
  10. En el repositorio remoto, Kai revisa y aprueba la solicitud de extracción, y combina el cambio en la rama prod.
  11. Dataform actualiza automáticamente el resultado de la compilación en la versión de production con la frecuencia especificada. Durante la próxima actualización del resultado de compilación de production, Dataform agrega la tabla enterprise-prod.analytics.user_stats al resultado de compilación.
  12. Durante una ejecución programada de una configuración de flujo de trabajo, Dataform ejecuta la tabla enterprise-prod.analytics.user_stats en el esquema analytics del proyecto enterprise-prod de Google Cloud en BigQuery.
  13. La tabla user_stats está disponible para los usuarios finales en el esquema analytics del proyecto enterprise-prod de Google Cloud en BigQuery.

¿Qué sigue?