Tester la qualité des données

Ce document vous explique comment utiliser Dataform Core pour créer des assertions de table Dataform et tester le code de votre workflow.

À propos des assertions

Une assertion est une requête de test de qualité des données qui trouve les lignes enfreignant une ou plusieurs conditions spécifiées dans la requête. Si la requête renvoie un résultat, l'assertion échoue. Dataform exécute des assertions chaque fois qu'il met à jour votre workflow. Il vous alerte en cas d'échec.

Dataform crée automatiquement des vues dans BigQuery qui contiennent les résultats des requêtes d'assertion compilées. Comme configuré dans le fichier de paramètres de votre workflow, Dataform crée ces vues dans un schéma d'assertions où vous pouvez inspecter les résultats des assertions.

Par exemple, pour le schéma dataform_assertions par défaut, Dataform crée une vue dans BigQuery au format suivant : dataform_assertions.assertion_name.

Vous pouvez créer des assertions pour tous les types de tables Dataform : tables, tables incrémentielles, vues et vues matérialisées.

Vous pouvez créer des assertions de différentes manières :

Avant de commencer

  1. Dans la console Google Cloud , accédez à la page Dataform.

    Accéder à la page Dataform

  2. Sélectionnez ou créez un dépôt.

  3. Sélectionnez ou créez un espace de travail de développement.

  4. Créez une table.

Rôles requis

Pour obtenir les autorisations nécessaires pour créer des assertions, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Dataform (roles/dataform.editor) sur les espaces de travail. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Créer des assertions intégrées

Vous pouvez ajouter des assertions Dataform intégrées au bloc config d'une table. Dataform exécute ces assertions après la création de la table. Une fois que Dataform a créé la table, vous pouvez vérifier si l'assertion a réussi dans l'onglet Journaux d'exécution du workflow de votre espace de travail.

Vous pouvez créer les assertions suivantes dans le bloc config d'un tableau :

  • nonNull

    Cette condition affirme que les colonnes spécifiées ne sont pas nulles dans toutes les lignes du tableau. Cette condition est utilisée pour les colonnes qui ne peuvent jamais être nulles.

    L'exemple de code suivant montre une assertion nonNull dans le bloc config d'un tableau :

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

    Cette condition affirme que toutes les lignes du tableau suivent la logique personnalisée que vous définissez. Chaque condition de ligne est une expression SQL personnalisée, et chaque ligne de tableau est évaluée par rapport à chaque condition de ligne. L'assertion échoue si une ligne du tableau renvoie false.

    L'exemple de code suivant montre une assertion rowConditions personnalisée dans le bloc config d'un tableau incrémentiel :

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

    Cette condition affirme qu'aucune ligne du tableau ne présente la même valeur dans une colonne spécifiée.

    L'exemple de code suivant montre une assertion uniqueKey dans le bloc config d'une vue :

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

    Cette condition affirme qu'aucune ligne du tableau n'a la même valeur dans les colonnes spécifiées. L'assertion échoue si la table comporte plusieurs lignes avec les mêmes valeurs pour toutes les colonnes spécifiées.

    L'exemple de code suivant montre une assertion uniqueKeys dans le bloc config d'un tableau :

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

Ajouter des assertions au bloc config

Pour ajouter des assertions au bloc de configuration d'un tableau, procédez comme suit :

  1. Dans votre espace de travail de développement, dans le volet Fichiers, sélectionnez un fichier SQLX de définition de table.
  2. Dans le bloc config du fichier de table, saisissez assertions: {}.
  3. Dans assertions: {}, ajoutez vos assertions.
  4. Facultatif : Cliquez sur Format.

L'exemple de code suivant montre les conditions ajoutées dans le bloc 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 ...

Créer des assertions manuelles avec SQLX

Les assertions manuelles sont des requêtes SQL que vous écrivez dans un fichier SQLX dédié. Une requête SQL d'assertion manuelle doit renvoyer zéro ligne. Si la requête renvoie des lignes lorsqu'elle est exécutée, l'assertion échoue.

Pour ajouter des assertions manuelles dans un nouveau fichier SQLX, procédez comme suit :

  1. Dans le volet Fichiers, à côté de definitions/, cliquez sur le menu  Plus.
  2. Cliquez sur Créer un fichier.
  3. Dans le champ Ajouter un chemin d'accès au fichier, saisissez le nom du fichier suivi de .sqlx. Par exemple, definitions/custom_assertion.sqlx.

    Les noms de fichiers ne peuvent contenir que des chiffres, des lettres, des traits d'union et des traits de soulignement.

  4. Cliquez sur Créer un fichier.

  5. Dans le volet Fichiers, cliquez sur le nouveau fichier.

  6. Dans le fichier, saisissez :

    config {
      type: "assertion"
    }
    
  7. Sous le bloc config, rédigez votre ou vos requêtes SQL.

  8. Facultatif : Cliquez sur Format.

L'exemple de code suivant montre une assertion manuelle dans un fichier SQLX qui affirme que les champs A, B et c ne sont jamais NULL dans sometable :

config { type: "assertion" }

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

Étapes suivantes