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 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 consente di eseguire le seguenti azioni di trasformazione dei dati:
- Sviluppare ed eseguire flussi di lavoro per la trasformazione dei dati.
- Collaborare con i membri del team allo sviluppo del flusso di lavoro tramite Git.
- Gestire un numero elevato di tabelle e le relative dipendenze.
- Dichiarare i dati di origine e gestire le dipendenze delle tabelle.
- Visualizzare una visualizzazione dell'albero delle dipendenze del flusso di lavoro.
- Gestire i dati con il codice SQL in un repository centrale.
- Riutilizzare il codice con JavaScript.
- Testare la correttezza dei dati con test di qualità sulle tabelle di origine e di output.
- Controllare la versione del codice SQL.
- Documentare 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:
- Dataform consente di creare repository per gestire il codice.
- Dataform consente di creare workspace per lo sviluppo.
- Dataform consente di sviluppare flussi di lavoro in un workspace di sviluppo.
- Dataform compila Dataform Core in SQL.
- Dataform esegue l'albero delle dipendenze.
Dataform 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 della versione. Puoi collegare un repository Dataform a un provider Git di terze parti.
Dataform 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 consente di sviluppare Dataform Core in un workspace di sviluppo
In un workspace di sviluppo, puoi definire e documentare le tabelle, le relative dipendenze e la logica di trasformazione per creare il 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 flusso di lavoro di SQL standard.
- Aggiunge istruzioni SQL boilerplate, come
CREATE TABLEoINSERT, al codice in linea con la configurazione della query. - Transpila (compila da origine a origine) JavaScript in SQL.
- Risolve le dipendenze e verifica la presenza di errori, incluse le 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 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 su tabelle e viste per verificare la correttezza dei dati.
- Esegue altre operazioni SQL che hai definito.
- Aggiorna i metadati in Knowledge Catalog (anteprima).
Al termine dell'esecuzione, puoi utilizzare le tabelle e le viste per tutti gli scopi di analisi.
Puoi visualizzare i log per vedere quali tabelle sono state create, se le asserzioni sono state superate o non superate, quanto tempo è stato necessario per completare ogni azione, e altre informazioni. Puoi anche visualizzare il codice SQL esatto eseguito in BigQuery.
Funzionalità di Dataform
Con Dataform, puoi sviluppare ed eseguire il deployment di tabelle, tabelle incrementali o viste in BigQuery. Dataform offre un ambiente web per le seguenti attività:
- Sviluppo del flusso di lavoro
- Connessione con GitHub, GitLab, Azure DevOps Services e Bitbucket
- Integrazione continua e deployment continuo
- Esecuzione workflow
Le sezioni seguenti descrivono le principali funzionalità di Dataform.
Repository
Ogni progetto Dataform viene 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:
File di configurazione
I file di configurazione JSON o SQLX consentono di configurare i flussi di lavoro. 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
Gli include sono file JavaScript in cui puoi definire variabili e funzioni da utilizzare nel tuo progetto.
Ogni repository Dataform deve essere connesso a un account di servizio personalizzato. Seleziona un account di servizio personalizzato quando lo crei. Puoi modificare il service account in un secondo momento.
Controllo delle versioni
Dataform utilizza il sistema di controllo della versione Git per mantenere un record 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 connesso 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 dei workspace Dataform. In un workspace Dataform, puoi eseguire il pull delle modifiche dal repository, eseguire il commit di tutte o di alcune modifiche ed eseguirne il push nei branch Git del repository.
Sviluppo del flusso di lavoro
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 workspace di sviluppo tra le sessioni.
In un workspace di sviluppo, puoi sviluppare le azioni del flusso di lavoro utilizzando Dataform Core con SQLX e JavaScript o esclusivamente con JavaScript. Puoi formattare automaticamente il codice Dataform Core o JavaScript.
Ogni elemento di un flusso di lavoro 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 un workspace Dataform, puoi sviluppare le seguenti azioni del flusso di lavoro:
- Dichiarazioni dei dati di origine
- Tabelle e viste
- Tabelle incrementali
- Partizioni e cluster di tabelle
- Dipendenze tra le azioni
- Documentazione delle tabelle
- Operazioni SQL personalizzate
- Etichette BigQuery
- Tag di policy BigQuery
- Tag Dataform
- Test di qualità dei dati, chiamati asserzioni
Puoi utilizzare JavaScript per riutilizzare il codice del flusso di lavoro Dataform nei seguenti modi:
- In un file con incapsulamento del codice
- In un repository con include
- Tra i repository con i pacchetti
Dataform compila il codice del flusso di lavoro nel workspace in tempo reale. Nel workspace, puoi visualizzare le query compilate e i dettagli delle azioni in ogni file. Puoi anche visualizzare lo stato di 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 workspace Dataform.
Per esaminare l'intero flusso di lavoro definito nel workspace, puoi visualizzare un grafico compilato interattivo che mostra tutte le azioni compilate nel flusso di lavoro e le relazioni tra loro.
Compilazione del flusso di lavoro
Dataform utilizza le impostazioni di compilazione predefinite, configurate nel file delle impostazioni del flusso di lavoro, per compilare il codice del flusso di lavoro nel workspace in SQL in tempo reale, creando un risultato di compilazione del workspace.
Puoi sostituire le impostazioni di compilazione per personalizzare il modo in cui Dataform compila il 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 sostituire il Google Cloud progetto in cui Dataform esegue 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 della release, puoi sostituire il Google Cloud progetto in cui Dataform esegue i risultati di 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 di compilazione. Per pianificare le esecuzioni dei risultati di compilazione creati in una configurazione della release selezionata, puoi creare una configurazione del flusso di lavoro.
Esecuzione del flusso di lavoro
Durante l'esecuzione di un flusso di lavoro, Dataform esegue i risultati di compilazione dei flussi di lavoro 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 flusso di lavoro in un workspace di sviluppo o pianificare le esecuzioni.
Quando attivi l'esecuzione di un flusso di lavoro, Dataform esegue le azioni nell'ordine definito dalle relative dipendenze. Per ogni azione, Dataform esegue i seguenti passaggi:
- Esegue l'SQL compilato in BigQuery.
- Aggiorna lo stato dell'azione nel log di esecuzione.
- Al termine di un'azione, Dataform avvia automaticamente una sincronizzazione dei metadati con Knowledge Catalog (anteprima). Questo processo di arricchimento aggiorna Knowledge Catalog con i metadati semantici definiti nella configurazione SQLX. La sincronizzazione avviene in modo asincrono e utilizza un meccanismo di ripetizione, garantendo che gli aggiornamenti dei metadati non influiscano sulla latenza della pipeline o causino errori del flusso di lavoro se l'API Dataplex non è temporaneamente disponibile.
Puoi pianificare le esecuzioni di Dataform in BigQuery nei seguenti modi:
- Crea configurazioni del flusso di lavoro per pianificare le esecuzioni dei risultati di compilazione creati nelle configurazioni della release
- Pianifica le esecuzioni con Managed Service for Apache Airflow
- Pianifica le esecuzioni con Workflows e Cloud Scheduler
Puoi anche automatizzare le esecuzioni con i trigger Cloud Build.
Per eseguire il debug degli errori, puoi monitorare le esecuzioni nei seguenti modi:
- Visualizza i log di esecuzione dettagliati di Dataform
- Visualizza gli audit log per Dataform
- Visualizza i log di Cloud Logging per Dataform
Dataform Core
Dataform Core è un meta-linguaggio open source per creare tabelle e flussi di lavoro SQL. Dataform Core estende SQL fornendo un sistema di gestione delle dipendenze, test automatici della qualità dei dati e documentazione dei dati.
Puoi utilizzare Dataform Core per i seguenti scopi:
- Definire tabelle, viste, viste materializzate o tabelle incrementali.
- Definire la logica di trasformazione dei dati.
- Dichiarare i dati di origine e gestire le 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 verificare la coerenza dei dati.
In Dataform, utilizzi Dataform Core per sviluppare flussi di lavoro ed eseguire il deployment degli asset in BigQuery.
Dataform Core fa parte del framework di modellazione dei dati open source Dataform che include anche Dataform CLI. Puoi compilare ed eseguire Dataform Core localmente tramite Dataform CLI 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 all'interno di 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 la chiamata di API esterne.
Blocco di configurazione del file SQLX
Un file SQLX è costituito da un blocco di configurazione e da 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.
Documentare i dati
Puoi documentare le tabelle e i relativi campi direttamente nel blocco di configurazione. La documentazione delle tabelle viene inviata direttamente a BigQuery e Knowledge Catalog (anteprima). Puoi analizzare questa documentazione ed eseguirne il push in altri strumenti.
Il seguente esempio di codice mostra come definire il tipo di tabella di output, documentare la tabella e aggiungere metadati per Knowledge Catalog 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, for example, sent, delivered",
customer_id: "Unique customer ID",
payment_status: "The status of a payment, for example, 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"
},
metadata: {
overview: "This table provides joined orders and payment data.",
extraProperties: {
generic: {
system: "BigQuery",
type: "table"
}
}
}
}
Definire i test di qualità dei dati
Puoi definire test di qualità dei dati, chiamati asserzioni, per verificare l'unicità, i valori null o una condizione personalizzata. Dataform aggiunge le asserzioni definite nel blocco di configurazione all'albero delle dipendenze del flusso di lavoro 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 un test di qualità in un blocco di configurazione di un file SQLX:
config {
assertions: {
uniqueKey: ["id"]
}
}
Corpo del file SQLX
Nel corpo di un file SQLX, puoi eseguire le seguenti azioni:
- Definire una tabella e le relative dipendenze.
- Definire operazioni SQL aggiuntive da eseguire in BigQuery.
- Generare codice SQL con JavaScript.
Definire una tabella
Per definire una nuova tabella, puoi utilizzare le istruzioni SQL SELECT e la funzione ref.
La funzione ref è una funzione integrata SQLX fondamentale per la gestione delle dipendenze in Dataform. La funzione ref consente di fare riferimento alle tabelle definite nel progetto Dataform anziché codificare in modo rigido lo schema e i nomi delle tabelle dei 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, l'utilizzo di altre funzioni integrate di Dataform Core, consulta il riferimento di Dataform Core.
Definire 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 le operazioni pre-query e post-query.
Il seguente esempio di codice mostra come configurare le autorizzazioni di accesso in visualizzazione 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"
}
Incapsulare 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 SQLX in cui è definito il blocco. Per riutilizzare il codice in tutto il repository, puoi creare include.
Per modificare dinamicamente una query, puoi utilizzare JavaScript in linea in qualsiasi punto del corpo.
Il seguente esempio di codice mostra come definire un blocco JavaScript in un file SQLX e utilizzarlo in linea 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 funzionalità e moduli aggiuntivi forniti da Node.js. Se il codebase esistente richiede moduli Node.js, devi rimuovere queste dipendenze.
I progetti senza un campo name in
package.jsongenerano differenze inpackage-lock.jsonogni volta che vengono installati i pacchetti. Per evitare questo risultato, devi aggiungere una proprietànameinpackage.json.Gli URL
git+https://per le dipendenze inpackage.jsonnon sono supportati.Converti questi URL in URL di archivio
https://semplici. Ad esempio, convertigit+https://github.com/dataform-co/dataform-segment.git#1.5inhttps://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.L'esecuzione manuale dei test delle unità non è disponibile.
La ricerca di contenuti di file nei workspace 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 Dataform CLI. Per creare la tua immagine Docker, consulta Containerizzare un'applicazione nella documentazione di Docker.I seguenti metodi dell'API Dataform non sono conformi alle AIP.134 perché trattano la voce con carattere jolly
*come una richiesta errata e aggiornano tutti i campi anziché i campi impostati quandofield_maskviene omesso:Se l'esecuzione di una configurazione del flusso di lavoro pianificata non termina prima dell'inizio dell'esecuzione pianificata successiva, l'esecuzione pianificata successiva viene ignorata e contrassegnata con un errore.
Passaggi successivi
- Per saperne di più sul ciclo di vita del codice in Dataform, consulta Introduzione al ciclo di vita del codice in Dataform.
- Per saperne di più sui repository Dataform, consulta Introduzione ai repository.
- Per saperne di più sui workspace Dataform, consulta Creare un workspace di sviluppo Dataform.
- Per saperne di più sullo sviluppo di flussi di lavoro in Dataform, consulta Panoramica dei flussi di lavoro.
- Per saperne di più su Dataform CLI, consulta Utilizzare Dataform CLI.