Panoramica del core Dataform

Questo documento introduce il core di Dataform e mostra come utilizzarlo in Dataform.

Panoramica del core Dataform

Dataform è un meta-linguaggio open source per creare tabelle e flussi di lavoro SQL. Il core Dataform estende SQL fornendo un sistema di gestione delle dipendenze, test automatici della qualità dei dati e documentazione sui 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.
  • Riutilizzo di funzioni e variabili tra query diverse.
  • Scrittura di asserzioni di dati per garantire la coerenza dei dati.

In Dataform utilizzi Dataform Core per sviluppare flussi di lavoro SQL ed eseguire il deployment di asset in BigQuery.

Il core Dataform fa parte del framework di modellazione dei dati Dataform open source che include anche l'interfaccia a riga di comando Dataform. Puoi compilare ed eseguire Dataform core in locale tramite l'interfaccia a riga di comando di Dataform all'esterno di Google Cloud.

Per utilizzare Dataform core, devi scrivere file SQLX. Ogni file SQLX contiene una query che definisce una relazione di database creata e aggiornata da Dataform all'interno di BigQuery.

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

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

Blocco della configurazione dei file SQLX

Un file SQLX è costituito da un blocco di configurazione e da un corpo. Tutte le proprietà config e il blocco config stesso sono facoltativi. Pertanto, qualsiasi file SQL semplice è un file SQLX valido che Dataform esegue così come è.

Nel blocco della configurazione puoi eseguire le seguenti azioni:

Specifica 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 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 la documentazione e inviarla ad altri strumenti.

Definire i test sulla qualità dei dati

Puoi definire test di qualità dei dati, chiamati assertions, per verificare l'unicità, valori nulli o una condizione personalizzata. Dataform aggiunge asserzioni definite nel blocco di configurazione alla struttura 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"]
  }
}

Corpo del file SQLX

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

Definisci una tabella

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

La funzione ref è una funzione SQLX integrata, fondamentale per la gestione delle dipendenze in Dataform. La funzione ref consente di fare riferimento alle tabelle definite nel progetto Dataform anziché codificare i nomi dello schema e delle tabelle della tabella dei dati.

Dataform utilizza la funzione ref per creare una struttura ad 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 aggiuntiva delle dipendenze, ad esempio sull'esecuzione del codice in modo condizionale utilizzando altre funzioni integrate principali di Dataform, consulta il riferimento principale di Dataform.

Definisci operazioni SQL aggiuntive

Per configurare Dataform per eseguire una o più istruzioni SQL prima o dopo aver creato una tabella o una vista, puoi specificare operazioni pre-query e post-query.

Il seguente esempio di codice mostra come configurare le autorizzazioni di accesso alla tabella o alla visualizzazione 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 il blocco è definito. Per riutilizzare il codice nell'intero repository, puoi creare inclusioni.

Per modificare in modo dinamico 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 in linea all'interno di una query:

js {
  const columnName = "foo";
}

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

Passaggi successivi