Questo documento introduce i concetti e le procedure 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 sono stati 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:
- Sviluppare ed eseguire 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 dell'albero delle dipendenze del tuo flusso di lavoro.
- Gestisci i dati con il codice SQL in un repository centrale.
- Riutilizzare il codice con JavaScript.
- Verifica la correttezza dei dati con test di qualità sulle tabelle di origine e di output.
- Controllo della 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:
- Dataform ti consente di creare repository per gestire il tuo codice.
- Dataform ti consente di creare spazi di lavoro per lo sviluppo.
- Dataform ti consente di sviluppare flussi di lavoro in uno spazio di lavoro di sviluppo.
- Dataform compila il proprio core in SQL.
- Dataform esegue l'albero delle dipendenze.
Dataform ti consente di creare repository per gestire il tuo codice
In un repository Dataform, utilizzi Dataform core, un'estensione di SQL, per scrivere file SQLX in cui definire 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 spazi di lavoro per lo sviluppo
Puoi creare spazi di lavoro di sviluppo all'interno di un repository Dataform per lo sviluppo di Dataform core. In un workspace di sviluppo, puoi apportare modifiche al repository, compilarlo, testarlo e spingerlo nel repository principale tramite Git.
Dataform ti consente di sviluppare il nucleo di Dataform in uno spazio di lavoro di sviluppo
In uno spazio di lavoro di sviluppo, puoi definire e documentare le tabelle, le relative dipendenze e la logica di trasformazione per creare il tuo flusso di lavoro. Puoi anche configurare le azioni in JavaScript.
Dataform compila il nucleo di Dataform
Durante la compilazione, Dataform esegue le seguenti attività:
- Compila il nucleo di Dataform in un flusso di lavoro di SQL standard.
- Aggiunge istruzioni SQL standard, come
CREATE TABLE
oINSERT
, al codice in linea con la configurazione della query. - Traspila (compila da sorgente a sorgente) JavaScript in SQL.
- Risolve le dipendenze e controlla la presenza di errori, tra cui dipendenze mancanti o circolari.
- Consente di creare l'albero delle dipendenze di tutte le azioni da eseguire in BigQuery.
La compilazione di Dataform è ermetica per garantire la coerenza della compilazione, in quanto lo stesso codice viene compilato sempre nello stesso risultato di compilazione SQL. Dataform compila il codice in un ambiente sandbox senza accesso a internet. Durante la compilazione non sono disponibili azioni aggiuntive, come le chiamate alle API esterne.
Per eseguire il debug in tempo reale, puoi esaminare il flusso di lavoro compilato del progetto in un grafico interattivo nello spazio di lavoro 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 visualizzazioni per verificare la correttezza dei dati.
- Esegue altre operazioni SQL che hai definito.
Dopo l'esecuzione, puoi utilizzare le tabelle e le visualizzazioni per tutte le finalità di analisi.
Puoi visualizzare i log per vedere quali tabelle sono state create, se le verifiche sono state superate o meno, il tempo 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 e deployment continui
- Esecuzione del flusso di lavoro
Le sezioni seguenti descrivono le funzionalità principali 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 ti consentono di configurare i flussi di lavoro. Contengono configurazione generale, pianificazioni di esecuzione o schema per la creazione di nuove tabelle e viste.
Definizioni
Le definizioni sono file SQLX e JavaScript che definiscono nuove tabelle, visualizzazioni e operazioni SQL aggiuntive da eseguire in BigQuery.
Include
Gli inclusi sono file JavaScript in cui puoi definire variabili e funzioni da utilizzare nel tuo progetto.
Ogni repository Dataform è collegato a un account di servizio. Puoi selezionare un account di servizio quando crei un repository o modificare l'account di servizio 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 mantenere un record di ogni modifica apportata ai file del progetto e per gestire le versioni dei file.
Ogni repository Dataform può gestire il proprio repository Git o essere collegato a un repository Git di terze parti remoto. Puoi collegare un repository Dataform a un repository GitHub, GitLab, Azure DevOps Services o Bitbucket.
Gli utenti eseguono il controllo della versione del codice del flusso di lavoro all'interno degli spazi di lavoro Dataform. In un'area di lavoro Dataform, puoi estrarre le modifiche dal repository, eseguire il commit di tutte o di alcune modifiche e inviarle ai branch Git del repository.
Sviluppo del flusso di lavoro
In Dataform, apporti modifiche a file e directory all'interno di un workspace di sviluppo. Uno spazio di lavoro di sviluppo è una copia virtuale modificabile dei contenuti di un repository Git. Dataform conserva lo stato dei file nello spazio di lavoro di sviluppo tra le sessioni.
In un'area di lavoro di sviluppo, puoi sviluppare azioni di flusso di lavoro SQL utilizzando Dataform core con SQLX e JavaScript oppure esclusivamente con JavaScript. Puoi formattare automaticamente il codice JavaScript o di Dataform Core.
Ogni elemento di un workflow Dataform, ad esempio una tabella o un'affermazione, corrisponde a un'azione eseguita da Dataform 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 di flusso di lavoro:
- Dichiarazioni dei dati di origine
- Tabelle e visualizzazioni
- Tabelle incrementali
- Partizioni e cluster di tabelle
- Dipendenze tra le azioni
- Documentazione delle tabelle
- Operazioni SQL personalizzate
- Etichette BigQuery
- Tag delle norme BigQuery
- Tag Dataform
- Test di qualità dei dati, chiamati affermazioni
Puoi utilizzare JavaScript per riutilizzare il codice del flusso di lavoro Dataform nei seguenti modi:
Dataform compila il codice del flusso di lavoro nella tua area di lavoro in tempo reale. Nella tua area di lavoro, 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 nella tua area di lavoro Dataform.
Per ispezionare l'intero flusso di lavoro definito nella tua area di lavoro, puoi visualizzare un grafico compilato interattivo che mostra tutte le azioni compilate nel flusso di lavoro e le relazioni tra di 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 nell'area di lavoro in SQL in tempo reale, creando un risultato di compilazione dell'area di lavoro.
Puoi eseguire l'override delle impostazioni di compilazione per personalizzare la modalità di compilazione del flusso di lavoro in un risultato di compilazione da parte di Dataform.
Con gli override della compilazione dell'area di lavoro, puoi configurare gli override della compilazione per tutti gli spazi di lavoro in un repository. Puoi impostare override delle aree di lavoro dinamiche per creare risultati di compilazione personalizzati per ogni area di lavoro, trasformandole in ambienti di sviluppo isolati. Puoi eseguire l'override del Google Cloud progetto in cui Dataform eseguirà i contenuti di uno spazio di lavoro, aggiungere un prefisso ai nomi di tutte le tabelle compilate e aggiungere un suffisso allo schema predefinito.
Con le configurazioni della release, puoi configurare modelli di impostazioni di compilazione per creare risultati di compilazione di un repository Dataform. In una configurazione di release, puoi eseguire l'override del Google Cloud progetto 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 di compilazione creati in una configurazione della release selezionata, puoi creare una configurazione del workflow.
Esecuzione del flusso di lavoro
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 visualizzazioni definite nel tuo flusso di lavoro in BigQuery, puoi avviare manualmente un'esecuzione del flusso di lavoro in uno spazio di lavoro di sviluppo o pianificare le esecuzioni.
Puoi pianificare le esecuzioni di Dataform in BigQuery nei modi seguenti:
- Crea configurazioni dei flussi di lavoro per pianificare le esecuzioni dei risultati di compilazione creati nelle configurazioni delle release
- Pianificare le esecuzioni con Cloud Composer
- Pianificare le esecuzioni con Workflows e Cloud Scheduler
Per eseguire il debug degli errori, puoi monitorare le esecuzioni nei seguenti modi:
- Visualizzare i log di esecuzione di Dataform dettagliati
- Visualizzare i log di controllo per Dataform
- Visualizzare i log di Cloud Logging per Dataform
Nucleo Dataform
Dataform Core è un metalinguaggio 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 le seguenti finalità:
- 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 delle tabelle e delle colonne all'interno del codice
- Riutilizzo di funzioni e variabili in query diverse
- Scrittura di asserzioni dei dati per garantire la coerenza dei dati
In Dataform, utilizzi il nucleo di Dataform per sviluppare flussi di lavoro e implementare 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 l'interfaccia a riga di comando Dataform al di fuori di Google Cloud.
Per utilizzare il nucleo di Dataform, scrivi file SQLX. Ogni file SQLX contiene una query che definisce una relazione di database creata e aggiornata da Dataform in BigQuery.
Dataform compila il codice di Dataform in tempo reale per creare un risultato di compilazione SQL che puoi eseguire in BigQuery.
La compilazione di Dataform è ermetica per garantire la coerenza della compilazione, in quanto lo stesso codice viene compilato sempre nello stesso risultato di compilazione SQL. Dataform compila il codice in un ambiente sandbox senza accesso a internet. Durante la compilazione non sono disponibili azioni aggiuntive, come le chiamate ad 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 normale è un file SQLX valido che Dataform esegue così com'è.
Nel blocco di configurazione puoi eseguire le seguenti azioni:
Specifica i metadati della query
Puoi configurare la modalità di materializzazione delle query in BigQuery da parte di Dataform, ad esempio il tipo di tabella di output, il database di destinazione o le etichette utilizzando i metadati di configurazione.
Dati del documento
Puoi documentare le tabelle e i relativi campi direttamente nel blocco di configurazione. La documentazione delle tabelle viene inviata direttamente a BigQuery. Puoi analizzare questa documentazione e pubblicarla su altri strumenti.
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 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"]
}
}
Testo del file SQLX
Nel corpo di un file SQLX puoi eseguire le seguenti azioni:
- Definire una tabella e le relative dipendenze.
- Definisci ulteriori operazioni SQL da eseguire in BigQuery.
- Genera codice SQL con JavaScript.
Definire una tabella
Per definire una nuova tabella, puoi utilizzare le istruzioni SELECT
SQL 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 progetto Dataform anziché codificare in modo rigido lo schema e
i nomi delle tabelle della tabella di 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 statement 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 del codice in modo condizionale, l'utilizzo di altre funzioni predefinite di Dataform, consulta la documentazione di riferimento di Dataform.
Definisci altre operazioni SQL
Per configurare Dataform in modo che esegua uno o più istruzioni SQL prima o dopo la creazione di una tabella o di una vista, puoi specificare operazioni pre-query e post-query.
Il seguente esempio di codice mostra come configurare le autorizzazioni di accesso alle tabelle o alle visualizzazioni in un'operazione post-query.
SELECT * FROM ...
post_operations {
GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}
Incapsula il codice SQL
Per definire funzioni riutilizzabili per generare parti ripetitive di 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 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 semplice runtime V8 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.json
generano differenze supackage-lock.json
ogni volta che vengono installati i pacchetti. Per evitare questo risultato, devi aggiungere una proprietàname
inpackage.json
.Gli URL
git
+https://
per le dipendenze inpackage.json
non sono supportati.Converti questi URL in URL di archivi
https://
semplici. Ad esempio, convertigit+https://github.com/dataform-co/dataform-segment.git#1.5
inhttps://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz
.L'esecuzione manuale dei test di 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 di Dataform. Per creare la tua immagine Docker, consulta Eseguire il containerizzazione di un'applicazione nella documentazione di Docker.I seguenti metodi dell'API Dataform non rispettano le linee guida AIP.134 trattando la voce jolly
*
come una richiesta non valida e aggiornando tutti i campi anziché impostare i campi quandofield_mask
viene omesso:
Passaggi successivi
- Per scoprire di più sul ciclo di vita del codice in Dataform, consulta Introduzione al ciclo di vita del codice in Dataform.
- Per scoprire di più sui repository Dataform, consulta Introduzione ai repository.
- Per saperne di più sugli spazi di lavoro Dataform, consulta Introduzione allo sviluppo in uno spazio di lavoro.
- Per scoprire di più sullo sviluppo di flussi di lavoro in Dataform, consulta Introduzione ai workflow SQL.
- Per scoprire di più sull'interfaccia a riga di comando Dataform, consulta Utilizzare l'interfaccia a riga di comando Dataform.