Panoramica di Dataform

Questo documento introduce i concetti e i processi di Dataform.

Dataform è un servizio che consente agli analisti di dati di sviluppare, testare, controllare le versioni e pianificare flussi di lavoro complessi per la trasformazione dei dati in BigQuery.

Dataform ti consente di gestire la trasformazione dei dati nel processo di estrazione, caricamento e trasformazione (ELT) per l'integrazione dei dati. Dopo che i dati non elaborati vengono estratti dai sistemi di origine e caricati in BigQuery, Dataform ti aiuta a trasformarli in una suite di tabelle di dati ben definita, testata e documentata.

Dataform ti consente di eseguire le seguenti azioni di trasformazione dei dati:

  • Sviluppa ed esegui flussi di lavoro per la trasformazione dei dati.
  • Collabora con i membri del team allo sviluppo del flusso di lavoro tramite Git.
  • Gestisci un numero elevato di tabelle e le relative dipendenze.
  • Dichiara i dati di origine e gestisci le dipendenze delle tabelle.
  • Visualizza una visualizzazione della struttura ad albero delle dipendenze del workflow.
  • Gestisci i dati con il codice SQL in un repository centrale.
  • Riutilizza il codice con JavaScript.
  • Verifica la correttezza dei dati di test con test di qualità sulle tabelle di origine e di output.
  • Controlla la versione del codice SQL.
  • Documenta le tabelle di dati all'interno del codice SQL.

Processi di trasformazione dei dati in Dataform

Il flusso di lavoro di trasformazione dei dati per Dataform è il seguente:

  1. Dataform ti consente di creare repository per gestire il tuo codice.
  2. Dataform ti consente di creare workspace per lo sviluppo.
  3. Dataform ti consente di sviluppare flussi di lavoro in un workspace di sviluppo.
  4. Dataform compila Dataform Core in SQL.
  5. Dataform esegue l'albero delle dipendenze.

Dataform ti consente di creare repository per gestire il codice

In un repository Dataform, utilizzi Dataform Core, un'estensione di SQL, per scrivere file SQLX in cui definisci il flusso di lavoro. I repository Dataform supportano il controllo delle versioni. Puoi collegare un repository Dataform a un provider Git di terze parti.

Dataform ti consente di creare workspace per lo sviluppo

Puoi creare workspace di sviluppo all'interno di un repository Dataform per lo sviluppo di Dataform Core. In un workspace di sviluppo, puoi apportare modifiche al repository, compilarle, testarle ed eseguirne il push nel repository principale tramite Git.

Dataform ti consente di sviluppare Dataform Core in un workspace di sviluppo

In un workspace di sviluppo, puoi definire e documentare le tabelle, le loro dipendenze e la logica di trasformazione per creare il tuo flusso di lavoro. Puoi anche configurare le azioni in JavaScript.

Dataform compila Dataform Core

Durante la compilazione, Dataform esegue le seguenti attività:

  • Compila Dataform Core in un workflow di SQL standard.
  • Aggiunge istruzioni SQL standard, ad esempio CREATE TABLE o INSERT, al codice in linea con la configurazione della query.
  • Esegue la transpilazione (compilazione da origine a origine) di JavaScript in SQL.
  • Risolve le dipendenze e verifica la presenza di errori, incluse dipendenze mancanti o circolari.
  • Crea l'albero delle dipendenze di tutte le azioni da eseguire in BigQuery.

La compilazione di Dataform è ermetica per verificare la coerenza della compilazione, il che significa che lo stesso codice viene compilato nello stesso risultato di compilazione SQL ogni volta. Dataform compila il codice in un ambiente sandbox senza accesso a internet. Durante la compilazione non sono disponibili azioni aggiuntive, come la chiamata di API esterne.

Per eseguire il debug in tempo reale, puoi esaminare il flusso di lavoro compilato del tuo progetto in un grafico interattivo nel tuo workspace di sviluppo.

Dataform esegue l'albero delle dipendenze

In BigQuery, Dataform esegue le seguenti attività:

  • Esegue i comandi SQL, seguendo l'ordine dell'albero delle dipendenze.
  • Esegue query di asserzione sulle tabelle e sulle viste per controllare la correttezza dei dati.
  • Esegue altre operazioni SQL che hai definito.

Dopo l'esecuzione, puoi utilizzare le tabelle e le viste per tutti i tuoi scopi di analisi.

Puoi visualizzare i log per vedere quali tabelle sono state create, se le asserzioni sono state superate o meno, quanto tempo è stato necessario per completare ogni azione e altre informazioni. Puoi anche visualizzare il codice SQL esatto che è stato eseguito in BigQuery.

Funzionalità di Dataform

Con Dataform puoi sviluppare e implementare tabelle, tabelle incrementali o viste in BigQuery. Dataform offre un ambiente web per le seguenti attività:

  • Sviluppo del workflow
  • Connessione con GitHub, GitLab, Azure DevOps Services e Bitbucket
  • Integrazione continua e deployment continuo
  • Esecuzione workflow

Le sezioni seguenti descrivono le funzionalità principali di Dataform.

Repository

Ogni progetto Dataform è archiviato in un repository. Un repository Dataform contiene una raccolta di file di configurazione JSON, file SQLX e file JavaScript.

I repository Dataform contengono i seguenti tipi di file:

  • Config files

    I file JSON o SQLX di configurazione consentono di configurare i workflow. Contengono la configurazione generale, le pianificazioni di esecuzione o lo schema per la creazione di nuove tabelle e viste.

  • Definizioni

    Le definizioni sono file SQLX e JavaScript che definiscono nuove tabelle, viste e operazioni SQL aggiuntive da eseguire in BigQuery.

  • Include

    I file Includi sono file JavaScript in cui puoi definire variabili e funzioni da utilizzare nel tuo progetto.

Ogni repository Dataform è connesso a un account di servizio. Puoi selezionare un account di servizio quando crei un repository o modificare il service account in un secondo momento.

Per impostazione predefinita, Dataform utilizza un account di servizio derivato dal numero del progetto nel seguente formato:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Controllo delle versioni

Dataform utilizza il sistema di controllo della versione Git per tenere traccia di ogni modifica apportata ai file di progetto e per gestire le versioni dei file.

Ogni repository Dataform può gestire il proprio repository Git o essere collegato a un repository Git remoto di terze parti. Puoi connettere un repository Dataform a un repository GitHub, GitLab, Azure DevOps Services o Bitbucket.

Gli utenti controllano la versione del codice del flusso di lavoro all'interno degli spazi di lavoro Dataform. In uno spazio di lavoro Dataform, puoi estrarre le modifiche dal repository, eseguire il commit di tutte le modifiche o di quelle selezionate e inviarle ai rami Git del repository.

Sviluppo del workflow

In Dataform, apporti modifiche a file e directory all'interno di un workspace di sviluppo. Un workspace di sviluppo è una copia virtuale e modificabile dei contenuti di un repository Git. Dataform conserva lo stato dei file nel tuo workspace di sviluppo tra le sessioni.

In un workspace di sviluppo, puoi sviluppare azioni del workflow SQL utilizzando Dataform Core con SQLX e JavaScript oppure esclusivamente con JavaScript. Puoi formattare automaticamente il codice Dataform core o JavaScript.

Ogni elemento di un workflow Dataform, come una tabella o un'asserzione, corrisponde a un'azione che Dataform esegue in BigQuery. Ad esempio, un file di definizione della tabella è un'azione di creazione o aggiornamento della tabella in BigQuery.

In uno spazio di lavoro Dataform, puoi sviluppare le seguenti azioni del flusso di lavoro:

Puoi utilizzare JavaScript per riutilizzare il codice del flusso di lavoro Dataform nei seguenti modi:

Dataform compila il codice del flusso di lavoro nel tuo workspace in tempo reale. Nel tuo spazio di lavoro, puoi visualizzare le query compilate e i dettagli delle azioni in ogni file. Puoi anche visualizzare lo stato della compilazione e gli errori nel file modificato o nel repository.

Per testare l'output di una query SQL compilata prima di eseguirla in BigQuery, puoi eseguire l'anteprima della query nel tuo workspace Dataform.

Per esaminare l'intero flusso di lavoro definito nello spazio di lavoro, puoi visualizzare un grafico compilato interattivo che mostra tutte le azioni compilate nel flusso di lavoro e le relazioni tra loro.

Compilazione del workflow

Dataform utilizza le impostazioni di compilazione predefinite, configurate nel file delle impostazioni del workflow, per compilare in tempo reale il codice del workflow nel workspace in SQL, creando un risultato di compilazione del workspace.

Puoi eseguire l'override delle impostazioni di compilazione per personalizzare la modalità di compilazione del flusso di lavoro in un risultato di compilazione.

Con gli override di compilazione del workspace, puoi configurare gli override di compilazione per tutti i workspace in un repository. Puoi impostare override dinamici del workspace per creare risultati di compilazione personalizzati per ogni workspace, trasformando i workspace in ambienti di sviluppo isolati. Puoi eseguire l'override del progetto Google Cloud in cui Dataform eseguirà i contenuti di un workspace, aggiungere un prefisso ai nomi di tutte le tabelle compilate e aggiungere un suffisso allo schema predefinito.

Con le configurazioni della release, puoi configurare i modelli delle impostazioni di compilazione per creare i risultati di compilazione di un repository Dataform. In una configurazione di rilascio, puoi eseguire l'override del progetto Google Cloud in cui Dataform eseguirà i risultati della compilazione, aggiungere un prefisso ai nomi di tutte le tabelle compilate, aggiungere un suffisso allo schema predefinito e aggiungere variabili di compilazione. Puoi anche impostare la frequenza di creazione dei risultati della compilazione. Per pianificare le esecuzioni dei risultati della compilazione creati in una configurazione della release selezionata, puoi creare una configurazione del workflow.

Esecuzione workflow

Durante l'esecuzione del workflow, Dataform esegue i risultati della compilazione dei workflow per creare o aggiornare gli asset in BigQuery.

Per creare o aggiornare le tabelle e le viste definite nel flusso di lavoro in BigQuery, puoi avviare manualmente l'esecuzione di un workflow in un workspace di sviluppo o pianificare le esecuzioni.

Puoi pianificare le esecuzioni di Dataform in BigQuery nei seguenti modi:

Per eseguire il debug degli errori, puoi monitorare le esecuzioni nei seguenti modi:

Dataform Core

Dataform Core è un metalinguaggio open source per creare tabelle e workflow SQL. Dataform Core estende SQL fornendo un sistema di gestione delle dipendenze, test automatizzati della qualità dei dati e documentazione dei dati.

Puoi utilizzare Dataform Core per i seguenti scopi:

  • Definizione di tabelle, viste, viste materializzate o tabelle incrementali.
  • Definizione della logica di trasformazione dei dati.
  • Dichiarazione dei dati di origine e gestione delle dipendenze delle tabelle.
  • Documentare le descrizioni di tabelle e colonne all'interno del codice.
  • Riutilizzare funzioni e variabili in diverse query.
  • Scrivere asserzioni sui dati per verificarne la coerenza.

In Dataform, utilizzi Dataform Core per sviluppare workflow ed eseguire il deployment degli asset in BigQuery.

Dataform Core fa parte del framework di modellazione dei dati open source Dataform che include anche la CLI Dataform. Puoi compilare ed eseguire Dataform Core localmente tramite la CLI Dataform al di fuori di Google Cloud.

Per utilizzare Dataform Core, scrivi file SQLX. Ogni file SQLX contiene una query che definisce una relazione di database che Dataform crea e aggiorna in BigQuery.

Dataform compila il codice Dataform core in tempo reale per creare un risultato di compilazione SQL che puoi eseguire in BigQuery.

La compilazione di Dataform è ermetica per verificare la coerenza della compilazione, il che significa che lo stesso codice viene compilato nello stesso risultato di compilazione SQL ogni volta. Dataform compila il codice in un ambiente sandbox senza accesso a internet. Durante la compilazione non sono disponibili azioni aggiuntive, come chiamate API esterne.

Blocco di configurazione del file SQLX

Un file SQLX è composto da un blocco di configurazione e un corpo. Tutte le proprietà di configurazione e il blocco di configurazione stesso sono facoltativi. Di conseguenza, qualsiasi file SQL semplice è un file SQLX valido che Dataform esegue così com'è.

Nel blocco di configurazione puoi eseguire le seguenti azioni:

Specificare i metadati della query

Puoi configurare il modo in cui Dataform materializza le query in BigQuery, ad esempio il tipo di tabella di output, il database di destinazione o le etichette, utilizzando i metadati di configurazione.

Dati dei documenti

Puoi documentare le tabelle e i relativi campi direttamente nel blocco di configurazione. La documentazione delle tabelle viene trasferita direttamente a BigQuery. Puoi analizzare questa documentazione e inviarla ad altri strumenti.

Definisci i test di qualità dei dati

Puoi definire test di qualità dei dati, chiamati asserzioni, per verificare l'unicità, i valori nulli o una condizione personalizzata. Dataform aggiunge le asserzioni definite nel blocco di configurazione all'albero delle dipendenze del workflow dopo la creazione della tabella. Puoi anche definire le asserzioni al di fuori del blocco di configurazione, in un file SQLX separato.

Il seguente esempio di codice mostra come definire il tipo di tabella di output, documentare la tabella e definire un test di qualità in un blocco di configurazione di un file SQLX.

config {
  type: "table",
    description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

Corpo del file SQLX

Nel corpo di un file SQLX puoi eseguire le seguenti azioni:

Definire una tabella

Per definire una nuova tabella, puoi utilizzare le istruzioni SQL SELECT e la funzione ref.

La funzione ref è una funzione integrata di SQLX fondamentale per la gestione delle dipendenze in Dataform. La funzione ref ti consente di fare riferimento alle tabelle definite nel tuo progetto Dataform anziché codificare in modo rigido lo schema e i nomi delle tabelle dei tuoi dati.

Dataform utilizza la funzione ref per creare un albero delle dipendenze di tutte le tabelle da creare o aggiornare. Dopo la compilazione, Dataform aggiunge istruzioni boilerplate come CREATE, REPLACE o INSERT.

Il seguente esempio di codice mostra come fare riferimento a una tabella in un file SQLX con la funzione ref.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

L'output è simile al seguente:

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

Per ulteriori informazioni sulla gestione delle dipendenze aggiuntive, ad esempio l'esecuzione condizionale del codice e l'utilizzo di altre funzioni integrate di Dataform Core, consulta il riferimento di Dataform Core.

Definisci operazioni SQL aggiuntive

Per configurare Dataform in modo che esegua una o più istruzioni SQL prima o dopo la creazione di una tabella o di una vista, puoi specificare operazioni di pre-query e post-query.

Il seguente esempio di codice mostra come configurare le autorizzazioni di accesso a tabelle o viste in un'operazione post-query.

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

Includere il codice SQL

Per definire funzioni riutilizzabili per generare parti ripetitive del codice SQL, puoi utilizzare i blocchi JavaScript. Puoi riutilizzare il codice definito in un blocco JavaScript solo all'interno del file SLQX in cui è definito il blocco. Per riutilizzare il codice nell'intero repository, puoi creare include.

Per modificare dinamicamente una query, puoi utilizzare JavaScript incorporato in qualsiasi punto del corpo.

Il seguente esempio di codice mostra come definire un blocco JavaScript in un file SQLX e utilizzarlo inline all'interno di una query:

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

Limitazioni

Dataform presenta le seguenti limitazioni note:

  • Dataform in Google Cloud viene eseguito su un runtime V8 semplice e non supporta moduli e funzionalità aggiuntivi forniti da Node.js. Se il tuo codebase esistente richiede moduli Node.js, devi rimuovere queste dipendenze.

    I progetti senza un campo nome in package.json generano differenze in package-lock.json ogni volta che vengono installati i pacchetti. Per evitare questo risultato, devi aggiungere una proprietà name in package.json.

  • Gli URL git+https:// per le dipendenze in package.json non sono supportati.

    Converti questi URL in URL di archivio https:// semplici. Ad esempio, converti git+https://github.com/dataform-co/dataform-segment.git#1.5 in https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • L'esecuzione manuale dei test delle unità non è disponibile.

  • La ricerca dei contenuti dei file negli spazi di lavoro di sviluppo non è disponibile.

  • A partire da Dataform Core 3.0.0., Dataform non distribuisce un'immagine Docker. Puoi creare la tua immagine Docker di Dataform, che puoi utilizzare per eseguire l'equivalente dei comandi della CLI Dataform. Per creare la tua immagine Docker, consulta Containerizzare un'applicazione nella documentazione di Docker.

  • I seguenti metodi dell'API Dataform non rispettano le linee guida AIP.134 trattando la voce con carattere jolly * come una richiesta errata e aggiornando tutti i campi anziché i campi impostati quando field_mask viene omesso:

Passaggi successivi