Testare la qualità dei dati

Questo documento mostra come utilizzare Dataform Core per creare asserzioni di tabelle Dataform e testare il codice del flusso di lavoro.

Informazioni sulle asserzioni

Un'asserzione è 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 delle righe, l'asserzione non riesce. Dataform esegue le asserzioni ogni volta che aggiorna il flusso di lavoro e ti avvisa se una qualsiasi asserzione non va a buon fine.

Dataform crea automaticamente in BigQuery viste che contengono 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 controllare 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 console Google Cloud , vai alla pagina Dataform.

    Vai alla pagina Dataform

  2. Seleziona o crea un repository.

  3. Seleziona o crea un workspace di sviluppo.

  4. Crea una tabella.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare asserzioni, chiedi all'amministratore di concederti il ruolo IAM Editor Dataform (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 integrate

Puoi aggiungere asserzioni Dataform integrate al blocco config di una tabella. Dataform esegue queste asserzioni dopo la creazione della tabella. Dopo che Dataform crea la tabella, puoi verificare se l'asserzione è stata superata nella scheda Log di esecuzione del flusso di lavoro del tuo spazio di lavoro.

Puoi creare le seguenti asserzioni nel blocco config di una tabella:

  • 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 nulle.

    Il seguente esempio di codice mostra un'asserzione 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 definisci. Ogni condizione di riga è un'espressione SQL personalizzata e ogni riga della tabella viene valutata in base a ogni condizione di riga. L'asserzione non riesce se una riga della tabella restituisce false.

    Il seguente esempio di codice mostra un'asserzione rowConditions personalizzata nel blocco config 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'asserzione uniqueKey nel blocco config di una visualizzazione:

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'asserzione non riesce se nella tabella è presente più di una riga con gli stessi valori per tutte le colonne specificate.

    Il seguente esempio di codice mostra un'asserzione 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. Nell'area di lavoro di sviluppo, nel riquadro File, seleziona un file SQLX di definizione della tabella.
  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 ...

Crea asserzioni manuali con SQLX

Le asserzioni manuali sono query SQL che scrivi 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 riesce.

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 la query SQL o più query.

  8. (Facoltativo) Fai clic su Formato.

Il seguente esempio di codice mostra un'asserzione 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