Panoramica del core Dataform

Questo documento presenta il tuo core di Dataform e ti mostra come utilizzarlo in Dataform.

Panoramica del core Dataform

Il core di Dataform è un metalinguaggio 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 dei dati.

Puoi utilizzare il core di Dataform 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 per diverse query.
  • Scrivere asserzioni di dati per garantire la coerenza dei dati.

In Dataform, utilizzerai il core di Dataform per sviluppare flussi di lavoro SQL ed eseguire il deployment degli asset in BigQuery.

Il core Dataform fa parte del framework di modellazione dei dati open source Dataform che include anche l'interfaccia a riga di comando Dataform. Puoi compilare ed eseguire il core di Dataform in locale tramite Dataform CLI al di fuori di Google Cloud per eseguire il deployment degli asset nei seguenti data warehouse:

  • BigQuery
  • Snowflake
  • Redshift
  • Azure SQL Data Warehouse
  • Postgres

Per utilizzare il core Dataform, scrivi i file SQLX. Ogni file SQLX contiene una query che definisce una relazione di database e che Dataform crea e aggiorna all'interno del tuo data warehouse.

Blocco configurazione 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. Ciò premesso, 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 il modo in cui Dataform materializza le query nel tuo warehouse, 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 ed estenderla ad altri strumenti.

Definire i test sulla qualità dei dati

Puoi definire test della 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 flusso di lavoro dopo la creazione della tabella. Puoi anche definire asserzioni al di fuori del blocco di configurazione, in un file SQLX separato.

L'esempio di codice riportato di seguito 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 integrata di SQLX fondamentale per la gestione delle dipendenze in Dataform. La funzione ref consente di fare riferimento alle tabelle definite nel progetto Dataform anziché strutturare come hardcoded i nomi degli schemi e 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 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 l'esecuzione del codice in modo condizionale, utilizzando altre funzioni integrate di core Dataform, consulta il riferimento di core Dataform.

Definisci operazioni SQL aggiuntive

Per configurare Dataform per l'esecuzione di una o più istruzioni SQL prima o dopo la creazione di un set di dati, puoi specificare operazioni pre-query e post-query.

L'esempio di codice seguente mostra come configurare le autorizzazioni di accesso al set di dati 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 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 includere.

Per modificare in modo dinamico una query, puoi utilizzare JavaScript in linea in qualsiasi punto del corpo.

L'esempio di codice riportato di seguito 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