Gestione del ciclo di vita del codice

Questo documento descrive le best practice per la gestione del ciclo di vita del codice in Dataform: creazione di ambienti di sviluppo, di staging e di produzione e configurazione delle impostazioni di compilazione ed esecuzione per ogni ambiente.

Per creare un ciclo di vita standardizzato dei flussi di lavoro SQL di Dataform che mantenga l'igiene dei dati e ottimizzi i processi di sviluppo, ti consigliamo di:

  • Crea ambienti di esecuzione per isolare le tabelle create durante lo sviluppo dalle tabelle disponibili per gli utenti finali.

  • Configura le configurazioni delle release e dei flussi di lavoro per eseguire i flussi di lavoro in un ambiente di produzione e, facoltativamente, in un ambiente di staging.

Questo documento descrive le soluzioni per isolare le tabelle di sviluppo con gli override di compilazione dell'area di lavoro e per configurare gli ambienti di gestione temporanea e di produzione, le configurazioni di release e le configurazioni dei flussi di lavoro.

Queste soluzioni ti consentono di creare ambienti di esecuzione all'interno di un singolo repository Dataform e di un progetto Google Cloud. Puoi scegliere di avere più copie di un repository Dataform, ospitate in diversi progetti Google Cloud, con ogni progetto che corrisponde a una fase del ciclo di vita del codice, ad esempio sviluppo, gestione temporanea e produzione. Questo approccio consente di personalizzare le autorizzazioni di Identity and Access Management in ogni fase del ciclo di vita del codice.

Best practice per gli ambienti di esecuzione isolati

Ti consigliamo di isolare le tabelle create durante le esecuzioni del flusso di lavoro SQL di sviluppo dalle tabelle di produzione in BigQuery. In questo modo, gli utenti finali possono accedere alle tavole di produzione ed elimina il rischio che accedano per errore a dati errati.

Puoi creare ambienti di esecuzione isolati nei seguenti modi:

Suddividere le tabelle di sviluppo e produzione per schema
Consigliato per team di piccole dimensioni. Dataform crea tabelle di sviluppo e produzione in schemi diversi in BigQuery. Dataform esegue tutte le tabelle di sviluppo negli schemi che hanno lo stesso suffisso, che indica che sono state create durante lo sviluppo. Gli sviluppatori possono sovrascrivere le tabelle di sviluppo l'uno dell'altro.
Suddividi le tabelle di sviluppo e produzione in base allo schema e al progetto Google Cloud
Consigliata per team di medie dimensioni. Dataform crea tabelle di sviluppo e produzione in schemi e progetti diversi in BigQuery. Dataform ha pubblicato tutte le tabelle di sviluppo in un progetto Google Cloud di sviluppo dedicato. Ogni sviluppatore Dataform ha il proprio schema univoco per le tavole di sviluppo. Questa soluzione elimina il rischio che gli sviluppatori sovrascrivano accidentalmente le tabelle di sviluppo l'una dell'altra. Lo svantaggio di questo approccio è che l'eliminazione di schemi e tabelle di sviluppo e la ricostituzione di tutte le tabelle in ogni ambiente potrebbe richiedere più tempo.
Suddividi le tabelle di sviluppo, gestione temporanea e produzione per progetto Google Cloud
Consigliato per team di grandi dimensioni o che richiedono un ambiente di staging. Dataform esegue le tabelle di ogni ambiente in un progetto Google Cloud dedicato in BigQuery. Questa soluzione ti offre il controllo maggiore sul ciclo di vita del codice.

Tutte le soluzioni richiedono un unico repository Dataform collegato a un unico repository remoto di terze parti.

In tutte le soluzioni, gli sviluppatori attivano manualmente le esecuzioni delle tavole di sviluppo all'interno dei propri spazi di lavoro Dataform. Dataform compila automaticamente le tabelle di produzione e di staging in una configurazione della release e le esegue con la frequenza impostata in una configurazione del flusso di lavoro.

Suddividi lo sviluppo e la produzione in base allo schema

Questa soluzione crea due ambienti di esecuzione in cui Dataform eseguirà i flussi di lavoro SQL: sviluppo e produzione. Per suddividere le tabelle di sviluppo e di produzione in base allo schema, devi configurare le impostazioni del flusso di lavoro, gli override di compilazione dell'area di lavoro e una configurazione della release. Per pianificare le esecuzioni di produzione, devi creare una configurazione del flusso di lavoro.

Dataform esegue tutte le tabelle di sviluppo negli schemi che hanno lo stesso suffisso, che indica che sono state create durante lo sviluppo. Dataform esegue tutte le tabelle di produzione negli schemi senza suffisso.

La tabella seguente mostra una configurazione che suddivide le tabelle di sviluppo e di produzione in base allo schema, con uno schema di sviluppo:

Impostazione Sviluppo Produzione
Progetto Google Cloud enterprise-analytics enterprise-analytics
Ramo Git nome dello spazio di lavoro main
Override di compilazione dell'area di lavoro Suffisso schema: dev -
Configurazione della release - production
Configurazione del flusso di lavoro - production

In questa soluzione, le tabelle di sviluppo e produzione vengono archiviate in un singolo progetto Google Cloud.

Gli sviluppatori attivano l'esecuzione manualmente nelle loro aree di lavoro Dataform. In tutte le esecuzioni attivate manualmente, Dataform esegue le tabelle negli schemi con lo stesso suffisso, che indica che sono state create durante lo sviluppo. Gli sviluppatori devono essere consapevoli di poter sovrascrivere le tabelle degli altri.

In Dataform, gli sviluppatori eseguono il commit e il push delle modifiche ai propri rami personalizzati del repository remoto. Poi, nella piattaforma di hosting Git di terze parti, inviano richieste di pull. L'approvazione di una richiesta di pull unisce le modifiche al ramo main del repository remoto.

Dataform compila automaticamente le tabelle di produzione dal ramo main del repository remoto in un risultato di compilazione in base alle impostazioni di configurazione della release production.

Dataform esegue automaticamente il risultato di compilazione production in base alla pianificazione impostata nella configurazione del flusso di lavoro production.

Per implementare questa soluzione, configura le seguenti impostazioni di Dataform:

Impostazioni del flusso di lavoro

A seconda della versione di Dataform Core, le impostazioni del flusso di lavoro vengono memorizzate in workflow_settings.yaml o dataform.json. Per ulteriori informazioni, consulta Configurare le impostazioni del flusso di lavoro di Dataform.

In workflow_settings.yaml, configura le seguenti impostazioni:

defaultProject: enterprise-analytics
defaultDataset: analytics

In dataform.json, configura le seguenti impostazioni:

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

Sostituzioni di Workspace

Suffisso schema: "dev"

Configurazione della release

Commitish Git: "main"

Per pianificare le esecuzioni dei risultati della compilazione di production, crea una configurazione del flusso di lavoro.

Esempio di processo di sviluppo

In questo esempio, gli sviluppatori Sasha e Kai lavorano nello stesso repository Dataform. Il repository Dataform è connesso a un repository Git di terze parti remoto.

Eseguono il commit e il push delle modifiche ai rami personalizzati nel repository remoto, chiamati sasha e kai.

La tabella seguente mostra le impostazioni di ambiente applicate per Sasha, Kai e l'ambiente di produzione:

Impostazione Sasha Kai Produzione
Progetto Google Cloud enterprise-analytics enterprise-analytics enterprise-analytics
Ramo Git sasha kai main
Schema analytics_dev analytics_dev analytics

Sasha crea una nuova tabella e la esegue in produzione nel seguente processo:

  1. In uno spazio di lavoro Dataform, Sasha crea la tabella user_stats.
  2. Nell'area di lavoro, Sasha attiva manualmente l'esecuzione della tabella.
  3. Dataform crea la tabella enterprise-analytics.analytics_dev.user_stats nello schema analytics_dev nel progetto Google Cloud enterprise-analytics in BigQuery.
  4. Nell'area di lavoro, Sasha esegue il commit della modifica e la esegue nel ramo sasha nel repository Git remoto.
  5. Nel repository remoto, Sasha invia una richiesta di pull.
  6. Nel repository remoto, Kai esamina e approva la richiesta di pull, combinando la modifica con il ramo main.
  7. Dataform aggiorna automaticamente il risultato della compilazione nella release production con la frequenza specificata. Durante il successivo aggiornamento del risultato di compilazioneproduction, Dataform aggiunge la tabellaenterprise-analytics.analytics.user_stats al risultato di compilazione.
  8. Durante un'esecuzione pianificata di una configurazione del flusso di lavoro, Dataform esegue la tabella enterprise-analytics.analytics.user_stats nello schema analytics nel progetto Google Cloud enterprise-analytics in BigQuery.
  9. La tabella user_stats è disponibile per gli utenti finali nello schema analytics nel progetto Google Cloud enterprise-analytics in BigQuery.

Suddividi lo sviluppo e la produzione per schema e progetto

Questa soluzione crea due ambienti di esecuzione: sviluppo e produzione. Per suddividere le tabelle di sviluppo e di produzione in base allo schema e al progetto Google Cloud, devi configurare le impostazioni del flusso di lavoro, gli override di compilazione dell'area di lavoro e una configurazione della release. Per pianificare le esecuzioni di produzione, devi creare una configurazione del flusso di lavoro.

In questa soluzione, Dataform esegue lo sviluppo in un progetto Google Cloud di sviluppo dedicato, in schemi con un suffisso diverso per ogni area di lavoro.

Dataform esegue tutte le tabelle di produzione in BigQuery un progetto Google Cloud di produzione dedicato senza suffisso dello schema.

La tabella seguente mostra una configurazione che suddivide le tabelle di sviluppo e di produzione in base allo schema e al progetto Google Cloud, con uno schema di sviluppo per un'area di lavoro Dataform:

Impostazione Sviluppo Produzione
Progetto Google Cloud enterprise-dev enterprise-prod
Ramo Git nome dello spazio di lavoro main
Override di compilazione dell'area di lavoro Suffisso schema: ${workspaceName} -
Configurazione della release - production
Configurazione del flusso di lavoro - production

In questa soluzione, Dataform esegue le tabelle di sviluppo e produzione in diversi schemi e progetti Google Cloud in BigQuery.

Gli sviluppatori attivano l'esecuzione manualmente nelle loro aree di lavoro Dataform. Ogni sviluppatore lavora nella propria area di lavoro dedicata, a cui viene assegnato il suo nome, ad esempio sasha.

Quando uno sviluppatore attiva l'esecuzione nella propria area di lavoro, Dataform aggiunge il nome dell'area di lavoro come suffisso dello schema a tutti gli schemi. Quindi, Dataform esegue le tabelle nello schema personalizzato.

Ad esempio, Dataform crea tabelle dallo spazio di lavoro sasha nello schema analytics_sasha in BigQuery. In questo modo, ogni sviluppatore memorizza le proprie tabelle di sviluppo nei propri schemi. Non c'è il rischio di sovrascrivere accidentalmente le tabelle di altri sviluppatori.

In Dataform, gli sviluppatori eseguono il commit e il push delle modifiche ai propri rami personalizzati del repository remoto. Poi, nella piattaforma di hosting Git di terze parti, inviano richieste di pull. L'approvazione di una richiesta di pull unisce le modifiche al ramo main del repository remoto.

Dataform compila automaticamente le tabelle di produzione dal ramo main del repository remoto in un risultato di compilazione in base alle impostazioni di configurazione della release production.

Dataform esegue automaticamente il risultato di compilazione production in base alla pianificazione impostata nella configurazione del flusso di lavoro production.

Per implementare questa soluzione, configura le seguenti impostazioni di Dataform:

Impostazioni del flusso di lavoro

A seconda della versione di Dataform Core, le impostazioni del flusso di lavoro vengono memorizzate in workflow_settings.yaml o dataform.json. Per ulteriori informazioni, consulta Configurare le impostazioni del flusso di lavoro di Dataform.

In workflow_settings.yaml, configura le seguenti impostazioni:

defaultProject: enterprise-dev
defaultDataset: analytics

In dataform.json, configura le seguenti impostazioni:

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

Sostituzioni di Workspace

Suffisso schema: "${workspaceName}"

Configurazione della release

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

Per pianificare le esecuzioni dei risultati della compilazione production, crea una configurazione del flusso di lavoro con una pianificazione personalizzata che si adatti meglio alle tue esigenze.

Esempio di processo di sviluppo

In questo esempio, gli sviluppatori Sasha e Kai lavorano sullo stesso repository Dataform. Il repository Dataform è connesso a un repository Git di terze parti remoto.

Sasha lavora nella sua area di lavoro dedicata chiamata sasha, mentre Kai lavora nella sua area di lavoro dedicata chiamata Kai. Eseguono il commit e il push delle modifiche ai rami personalizzati nel repository remoto, chiamati sasha e kai.

La tabella seguente mostra le impostazioni di ambiente applicate per Sasha, Kai e l'ambiente di produzione:

Impostazione Sasha Kai Produzione
Progetto Google Cloud enterprise-dev enterprise-dev enterprise-prod
Ramo Git sasha kai main
Override di compilazione dell'area di lavoro Suffisso schema: ${workspaceName} Suffisso schema: ${workspaceName} -
Configurazione della release - - production
Configurazione del flusso di lavoro - - production

Sasha crea una nuova tabella e la esegue in produzione nel seguente processo:

  1. Nello spazio di lavoro Dataform sasha, Sasha crea la tabella user_stats.
  2. Nell'area di lavoro sasha, Sasha attiva manualmente l'esecuzione della tabella.
  3. Dataform esegue la tabella enterprise-dev.analytics_sasha.user_stats nello schema analytics_sasha nel progetto Google Cloud enterprise-dev in BigQuery.
  4. Nell'area di lavoro sasha, Sasha esegue il commit della modifica e la esegue nel ramo sasha nel repository Git remoto.
  5. Nel repository remoto, Sasha invia una richiesta di pull.
  6. Nel repository remoto, Kai esamina e approva la richiesta di pull, combinando la modifica con il ramo main.
  7. Dataform aggiorna automaticamente il risultato della compilazione nella release production con la frequenza specificata. Durante il successivo aggiornamento del risultato di compilazioneproduction, Dataform aggiunge la tabellaenterprise-prod.analytics.user_stats al risultato di compilazione.
  8. Durante un'esecuzione pianificata di una configurazione del flusso di lavoro, Dataform esegue la tabella enterprise-prod.analytics.user_stats nello schema analytics nel progetto Google Cloud enterprise-prod in BigQuery.
  9. La tabella user_stats è disponibile per gli utenti finali nello schema analytics nel progetto Google Cloud enterprise-prod in BigQuery.

Suddividi lo sviluppo, la gestione temporanea e la produzione in base a schema e progetto

Questa soluzione crea tre ambienti di esecuzione: sviluppo, gestione temporanea e produzione. Tutti gli ambienti sono suddivisi per progetto Google Cloud. Inoltre, lo sviluppo è separato dalla gestione temporanea e dalla produzione in base allo schema.

Per suddividere le tabelle di sviluppo, di staging e di produzione in base allo schema e al progetto Google Cloud, devi configurare le impostazioni del flusso di lavoro, gli override di compilazione dell'area di lavoro e due configurazioni di release. Per pianificare le esecuzioni di staging e produzione, devi creare due configurazioni del flusso di lavoro distinte.

In questa soluzione, Dataform esegue le tabelle di sviluppo in BigQuery in più schemi di sviluppo, uno per ogni area di lavoro Dataform, in un progetto Google Cloud di sviluppo dedicato.

Dataform esegue tutte le tabelle di staging in BigQuery in un progetto Google Cloud di staging dedicato in schemi con lo stesso suffisso, che indica che sono state create in staging.

Dataform esegue tutte le tabelle di produzione in BigQuery in un progetto Google Cloud di produzione dedicato in schemi con lo stesso suffisso, che indica che sono state create in produzione.

La tabella seguente mostra un esempio di configurazione che suddivide le tabelle di sviluppo, di staging e di produzione in base allo schema e al progetto Google Cloud, con uno schema di sviluppo per un'area di lavoro Dataform:

Impostazione Sviluppo Gestione temporanea Produzione
Progetto Google Cloud enterprise-dev enterprise-staging enterprise-prod
Ramo Git nome dello spazio di lavoro main prod
Override di compilazione dell'area di lavoro Suffisso schema: ${workspaceName} - -
Configurazione della release - staging production
Configurazione del flusso di lavoro - staging production

In questa soluzione, Dataform esegue le tabelle di sviluppo, di staging e di produzione in diversi progetti Google Cloud in BigQuery. Inoltre, Dataform esegue le tabelle di sviluppo in più schemi personalizzati, uno per ogni spazio di lavoro. Dataform esegue le tabelle di staging e di produzione nello stesso schema, ma in progetti Google Cloud diversi.

Gli sviluppatori attivano l'esecuzione manualmente nelle loro aree di lavoro Dataform. Ogni sviluppatore lavora nella propria area di lavoro dedicata, a cui viene assegnato il suo nome, ad esempio sasha.

Ogni area di lavoro corrisponde a uno schema BigQuery personalizzato, nominato in base all'area di lavoro. Quando uno sviluppatore attiva l'esecuzione nella propria area di lavoro, Dataform aggiunge il nome dell'area di lavoro come suffisso dello schema allo schema predefinito. Quindi, Dataform esegue le tabelle nello schema personalizzato in BigQuery.

Ad esempio, Dataform esegue le tabelle dello spazio di lavoro sasha nello schema analytics_sasha in BigQuery. In questo modo, ogni sviluppatore immagazzina le proprie tabelle di sviluppo nel proprio schema. Non c'è il rischio di sovrascrivere accidentalmente le tabelle di altri sviluppatori.

In Dataform, gli sviluppatori eseguono il commit e il push delle modifiche ai propri rami personalizzati del repository remoto. Poi, nella piattaforma di hosting Git di terze parti, invia pull request al ramo main. L'approvazione di una richiesta di pull consente di unire le modifiche al ramo main del repository remoto.

Dataform compila automaticamente le tabelle di staging dal ramo main del repository remoto in un risultato di compilazione in base alle impostazioni di configurazione della release staging.

Dataform esegue automaticamente il risultato di compilazione staging in base alla pianificazione impostata nella configurazione del flusso di lavoro staging.

Per promuovere le tabelle dalla gestione temporanea alla produzione, nella piattaforma di hosting Git di terze parti gli sviluppatori inviano richieste di pull dal ramo main al ramo prod. L'approvazione di una richiesta di pull unisce le modifiche al ramo prod del repository remoto.

Dataform compila automaticamente le tabelle di produzione dal ramo prod del repository remoto in un risultato di compilazione in base alle impostazioni di configurazione della release production.

Dataform esegue automaticamente il risultato di compilazione production in base alla pianificazione impostata nella configurazione del flusso di lavoro production.

Per implementare questa soluzione, configura le seguenti impostazioni di Dataform:

Impostazioni del flusso di lavoro

A seconda della versione di Dataform Core, le impostazioni del flusso di lavoro vengono memorizzate in workflow_settings.yaml o dataform.json. Per ulteriori informazioni, consulta Configurare le impostazioni del flusso di lavoro di Dataform.

In workflow_settings.yaml, configura le seguenti impostazioni:

defaultProject: enterprise-dev
defaultDataset: analytics

In dataform.json, configura le seguenti impostazioni:

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

Sostituzioni di Workspace

Suffisso schema: "${workspaceName}"

Configurazione della release staging

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

Configurazione della release prod

  • Commitish Git: "prod"
  • ID progetto Google Cloud: "enterprise-prod"

Per pianificare le esecuzioni dei risultati di compilazione di staging e production, crea due configurazioni di flusso di lavoro distinte con pianificazioni personalizzate che si adattano meglio alle tue esigenze.

Esempio di processo di sviluppo

In questo esempio, gli sviluppatori Sasha e Kai lavorano nello stesso repository Dataform. Il repository Dataform è connesso a un repository Git di terze parti remoto.

Sasha lavora nella sua area di lavoro dedicata chiamata sasha, mentre Kai lavora nella sua area di lavoro dedicata chiamata Kai. Eseguono il commit e il push delle modifiche ai rami personalizzati nel repository remoto, chiamati sasha e kai.

La tabella seguente mostra le impostazioni di ambiente applicate per Sasha, Kai e l'ambiente di produzione:

Impostazione Sasha Kai Gestione temporanea Produzione
Progetto Google Cloud enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Ramo Git sasha kai main prod
Schema analytics_sasha analytics_kai analytics analytics

Sasha crea una nuova tabella ed esegue il deployment in produzione nel seguente processo:

  1. Nello spazio di lavoro Dataform sasha, Sasha crea la tabella user_stats.
  2. Nell'area di lavoro sasha, Sasha attiva manualmente l'esecuzione della tabella.
  3. Dataform esegue la tabella enterprise-dev.analytics_sasha.user_stats nello schema analytics_sasha nel progetto Google Cloud enterprise-dev in BigQuery.
  4. Nell'area di lavoro sasha, Sasha esegue il commit della modifica e la esegue nel ramo sasha nel repository Git remoto.
  5. Nel repository remoto, Sasha invia una richiesta di pull al ramo main.
  6. Nel repository remoto, Kai esamina e approva la richiesta di pull, combinando la modifica con il ramo main.
  7. Dataform aggiorna automaticamente il risultato della compilazione nella release staging con la frequenza specificata. Durante il successivo aggiornamento del risultato di compilazionestaging, Dataform aggiunge la tabellaenterprise-staging.analytics.user_stats al risultato di compilazione.
  8. Durante un'esecuzione pianificata di una configurazione del flusso di lavoro, Dataform esegue la tabella enterprise-staging.analytics.user_stats nello schema analytics nel progetto Google Cloud enterprise-staging in BigQuery.
  9. Nel repository remoto, Sasha invia una richiesta di pull al ramo prod.
  10. Nel repository remoto, Kai esamina e approva la richiesta di pull, combinando la modifica con il ramo prod.
  11. Dataform aggiorna automaticamente il risultato della compilazione nella release production con la frequenza specificata. Durante il successivo aggiornamento del risultato di compilazioneproduction, Dataform aggiunge la tabellaenterprise-prod.analytics.user_stats al risultato di compilazione.
  12. Durante un'esecuzione pianificata di una configurazione del flusso di lavoro, Dataform esegue la tabella enterprise-prod.analytics.user_stats nello schema analytics nel progetto Google Cloud enterprise-prod in BigQuery.
  13. La tabella user_stats è disponibile per gli utenti finali nello schema analytics nel progetto Google Cloud enterprise-prod in BigQuery.

Passaggi successivi