Testare le tabelle con le asserzioni

Questo documento mostra come utilizzare Dataform core per creare affermazioni sulle tabelle Dataform e testare il codice del flusso di lavoro.

Informazioni sulle asserzioni

Un'affermazione è una query di test della qualità dei dati che trova le righe che violano una o più condizioni specificate nella query. Se la query restituisce righe, l'affermazione non va a buon fine. Dataform esegue le verifiche ogni volta che aggiorna il flusso di lavoro SQL e ti avvisa se una verifica non va a buon fine.

Dataform crea automaticamente in BigQuery delle visualizzazioni contenenti i risultati delle query di asserzione compilate. Come configurato nel file delle impostazioni del flusso di lavoro, Dataform crea queste visualizzazioni in uno schema di asserzioni in cui puoi esaminare i risultati delle asserzioni.

Ad esempio, per lo schema dataform_assertions predefinito, Dataform crea una vista in BigQuery nel seguente formato: dataform_assertions.assertion_name.

Puoi creare asserzioni per tutti i tipi di tabelle Dataform: tabelle, tabelle incrementali, viste e viste materializzate.

Puoi creare asserzioni nei seguenti modi:

Prima di iniziare

  1. Nella Google Cloud console, vai alla pagina Dataform.

    Vai alla pagina Dataform

  2. Seleziona o crea un repository.

  3. Seleziona o crea uno spazio di lavoro di sviluppo.

  4. Crea una tabella.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare asserzioni, chiedi all'amministratore di concederti il ruolo IAM Dataform Editor (roles/dataform.editor) negli spazi di lavoro. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Creare asserzioni predefinite

Puoi aggiungere asserzioni Dataform integrate al blocco config di una tabella. Dataform esegue queste verifiche dopo la creazione della tabella. Dopo che Dataform ha creato la tabella, puoi vedere se l'affermazione è passata nella scheda Log di esecuzione del flusso di lavoro della tua area di lavoro.

Nel blocco config di una tabella puoi creare le seguenti asserzioni:

  • nonNull

    Questa condizione afferma che le colonne specificate non sono nulle in tutte le righe della tabella. Questa condizione viene utilizzata per le colonne che non possono mai essere null.

    Il seguente esempio di codice mostra un'affermazione nonNull nel blocco config di una tabella:

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    Questa condizione afferma che tutte le righe della tabella seguono la logica personalizzata che hai definito. Ogni condizione di riga è un'espressione SQL personalizzata e ogni riga della tabella viene valutata in base a ogni condizione di riga. L'affermazione non va a buon fine se una riga della tabella risulta in false.

    Il seguente esempio di codice mostra un'affermazione rowConditions personalizzata nel config blocco di una tabella incrementale:

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    Questa condizione afferma che, in una colonna specificata, nessuna riga della tabella ha lo stesso valore.

    Il seguente esempio di codice mostra un'affermazione uniqueKey nel blocco config di una vista:

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    Questa condizione afferma che, nelle colonne specificate, nessuna riga della tabella ha lo stesso valore. L'affermazione non va a buon fine se nella tabella è presente più di una riga con gli stessi valori per tutte le colonne specificate.

    Il seguente esempio di codice mostra un'affermazione uniqueKeys nel blocco config di una tabella:

config {
  type: "table",
  assertions: {
    uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
  }
}
SELECT ...

Aggiungere asserzioni al blocco config

Per aggiungere asserzioni al blocco di configurazione di una tabella:

  1. Nella tua area di lavoro di sviluppo, seleziona un file SQLX di definizione della tabella nel riquadro File.
  2. Nel blocco config del file della tabella, inserisci assertions: {}.
  3. All'interno di assertions: {}, aggiungi le tue asserzioni.
  4. (Facoltativo) Fai clic su Formato.

Il seguente esempio di codice mostra le condizioni aggiunte nel blocco config:

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
    rowConditions: [
      'signup_date is null or signup_date > "2019-01-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...

Creare asserzioni manuali con SQLX

Le asserzioni manuali sono query SQL scritte in un file SQLX dedicato. Una query SQL di asserzione manuale deve restituire zero righe. Se la query restituisce righe quando viene eseguita, l'asserzione non va a buon fine.

Per aggiungere asserzioni manuali in un nuovo file SQLX:

  1. Nel riquadro File, accanto a definitions/, fai clic sul menu Altro.
  2. Fai clic su Crea file.
  3. Nel campo Aggiungi un percorso del file, inserisci il nome del file seguito da .sqlx. Ad esempio: definitions/custom_assertion.sqlx.

    I nomi dei file possono includere solo numeri, lettere, trattini e trattini bassi.

  4. Fai clic su Crea file.

  5. Nel riquadro File, fai clic sul nuovo file.

  6. Nel file, inserisci:

    config {
      type: "assertion"
    }
    
  7. Sotto il blocco config, scrivi una o più query SQL.

  8. (Facoltativo) Fai clic su Formato.

Il seguente esempio di codice mostra un'affermazione manuale in un file SQLX che afferma che i campi A, B e c non sono mai NULL in sometable:

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("sometable")}
WHERE
  a IS NULL
  OR b IS NULL
  OR c IS NULL

Passaggi successivi