Utilisation des attentes pour mettre en œuvre des contrôles de qualité des données

Le renvoi d’une valeur à partir d’une fonction de métrique de données (DMF) fournit des informations utiles, mais il peut être difficile de savoir si cela indique un problème de qualité des données sans connaître ce que vous considérez comme acceptable pour vos données. Par exemple, vous pouvez considérer que des tableaux contenant moins de 10 valeurs NULLdans une colonne donnée réussissent le contrôle de qualité des données. Dans ce cas, vous attendez que la valeur soit inférieure à 10 et vous souhaitez seulement être averti si elle dépasse ce seuil.

Une attente vous permet de définir des critères indiquant si les données réussissent un contrôle de qualité effectué par une DMF. Lorsque la DMFrenvoie une valeur, celle-ci est comparée à ce critère afin de déterminer si les données ont réussi ou échoué au contrôle. Les valeurs de renvoi en échec sont signalées comme des violations des attentes afin que vous puissiez prendre les mesures appropriées en fonction des données.

L’instruction suivante crée l’attente selon laquelle la colonne C1 contient moins de 10 valeurs NULL.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (C1)
  EXPECTATION my_exp ( VALUE < 10);
Copy

Vous pouvez définir des attentes à la fois pour les DMFs système et les DMFs personnalisées.

Définir ce qui répond à l’attente

Une attente inclut une expression booléenne qui détermine si l’attente a été satisfaite ou non. Lorsque cette expression est évaluée à TRUE, cela signifie que le résultat de la DMF correspond à votre attente.

Dans une expression, le mot-clé VALUE représente la valeur renvoyée par la DMF. Par exemple, supposons que vous ayez la définition suivante d’une attente :

EXPECTATION my_exp (VALUE < 5)
Copy

Snowflake remplace par la valeur VALUE renvoyée par la DMF lors de l’évaluation de l’attente. Si la DMF a renvoyé 3, l’attente serait satisfaite si l’expression était évaluée à TRUE.

Si une expression est évaluée à FALSE, Snowflake le signale comme une violation des attentes. Pour obtenir des informations sur le suivi de ces violations, voir Identifier les violations d’attente.

Une expression peut inclure les types d’opérateurs suivants :

Une expression ne peut pas faire référence à d’autres tableaux ou vues, ni à des fonctions définies par l’utilisateur (UDFs).

Créer une attente

Chaque association entre une DMF et un objet peuvent avoir une ou plusieurs attentes.

Vous pouvez ajouter une attente lorsque vous associez la DMFau tableau ou à la vue, ou l’ajouter ultérieurement à l’association. Vous pouvez également modifier une attente existante.

Après avoir ajouté une attente, vous pouvez tester manuellement cela sans avoir à attendre que la DMF s’exécute en fonction de sa planification.

Ajouter une attente lors de l’association d’une DMF

Vous utilisez une commande ALTERTABLE ou ALTERVIEW pour associer une DMF à un tableau ou à une vue. Vous pouvez ajouter des attentes à l’association dans la même instruction SQL qui crée l’association.

Par exemple, la syntaxe pour ajouter des attentes lors de l’association d’une DMF avec un tableau est la suivante. Les vues utilisent une syntaxe similaire. Cette prévisualisation présente la clause mise en évidence.

  ALTER TABLE <table>
    ADD DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

Où :

  • expectation_name est une chaîne utilisée pour identifier l’attente. Vous pouvez créer des attentes portant le même nom à condition qu’elles appartiennent à des associations différentes.

  • expression est une expression booléenne qui détermine si la DMF a renvoyé une valeur attendue. Voir Définir ce qui répond à l’attente.

Exemple : Ajouter une seule attente

Supposons que vous associez la DMF système MAX à la vue v1 afin de vérifier la valeur maximale dans la colonne c1 Vous prévoyez que la valeur maximale sera comprise entre 25 et 50.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.MAX ON (C1)
    EXPECTATION my_exp ( 25 < VALUE AND VALUE < 50);
Copy

Si la DMF MAX renvoie une valeur en dehors de cette plage de valeurs attendues, Snowflake l’enregistre comme une violation d’attente.

Exemple : Ajouter plusieurs attentes

Supposons que vous souhaitiez être averti lorsqu’une table n’a pas été mise à jour depuis cinq minutes, puis de nouveau lorsqu’elle n’a pas été mise à jour depuis 30 minutes. Vous pouvez ajouter les attentes suivantes, puis vérifier quand ces attentes ont été enfreintes.

ALTER TABLE emp
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (last_updated)
  EXPECTATION lessThan5Mins (VALUE < 300), lessThan30Mins (VALUE < 1800);
Copy

Ajouter une attente à une association existante

Vous utilisez une commande ALTERTABLE ou ALTERVIEW pour ajouter une attente à une association existante entre une DMF et la table ou la vue.

Par exemple, la syntaxe pour ajouter des attentes à une association entre une table et une DMF est comme suit. Les vues utilisent une syntaxe similaire. Cette prévisualisation présente la clause mise en évidence.

  ALTER TABLE <table>
    MODIFY DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ ADD EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

Où :

  • expectation_name est une chaîne utilisée pour identifier l’attente. Vous pouvez créer des attentes portant le même nom à condition qu’elles appartiennent à des associations différentes.

  • expression est une expression booléenne qui détermine si la DMF a renvoyé une valeur attendue. Voir Définir ce qui répond à l’attente.

Exemple

Supposons que vous ayez précédemment associé la DMF système NULL_COUNT à la colonne c1``dans la table``my_table. Pour ajouter une attente afin d’être averti lorsqu’il y a 10 valeurs NULL ou plus dans la colonne c1 , exécutez le code suivant :

ALTER TABLE my_table
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    ADD EXPECTATION my_exp (VALUE < 10);
Copy

Si le résultat de NULL_COUNT est de 15, il est signalé comme une violation des attentes.

Modifier une attente existante

Vous utilisez une clause MODIFYEXPECTATION pour modifier l’expression d’une attente que vous avez précédemment ajoutée à une association.

Par exemple, supposons que vous ayez ajouté précédemment l’attente my_exp à l’association entre la table t1 et la DMF NULL_COUNT. Pour modifier l’attente afin qu’elle soit violée lorsqu’il y a 15 valeurs NULL ou plus dans la colonne c1, exécutez l’instruction suivante :

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    MODIFY EXPECTATION my_exp (VALUE < 15);
Copy

L’expression précédente de l’attente est remplacée par VALUE < 15.

Tester une attente

Après avoir ajouté des attentes, vous pouvez appeler la fonction système SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS pour vous assurer qu’elles ont été ajoutées correctement et déterminer si ces attentes sont actuellement violées.

Par exemple, supposons que vous ayez ajouté au moins une attente à l’association entre une DMF et la table t1. Pour vérifier si ces attentes sont actuellement violées, exécutez l’instruction suivante :

SELECT *
  FROM TABLE(SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_db.sch.t1'));
Copy

Supprimer une attente

Utilisez une clause DROPEXPECTATION pour supprimer une attente d’une association et la retirer du système.

Par exemple, supposons que vous ayez ajouté précédemment l’attente my_exp à l’association entre la colonne c1 dans la table t1 et la DMF NULL_COUNT. Pour supprimer le my_exp de l’association et de la DMF, exécutez le code suivant :

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT on (c1)
    DROP EXPECTATION my_exp;
Copy

Identifier les violations d’attente

Vous pouvez identifier les violations d’attente à l’aide des éléments suivants :

SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW

Les résultats en matière de qualité des données sont enregistrés dans le tableau des événements dédié SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW.

Si l’association entre un objet et une DMF a une attente, deux lignes sont ajoutées à la table chaque fois que Snowflake calcule le résultat de la DMF. La première ligne enregistre des informations sur l’objet avec lequel la DMF est associée, la DMF elle-même, et le résultat du contrôle de qualité des données. La deuxième ligne enregistre des informations liées à l’attente définie sur l’association DMF, y compris si l’attente a été satisfaite ou violée. S’il y a plusieurs attentes, il y a une ligne pour chaque attente.

Le champ snow.data_metric.record_type`dans la colonne :code:`resource_attribute indique si une ligne correspond à une attente. Ce champ a deux valeurs possibles :

  • EXPECTATION_VIOLATION_STATUS : indique que la ligne correspond à une attente.

  • EVALUATION_RESULT : indique que la ligne correspond à l’évaluation de la DMF.

Si la ligne correspond à une attente, la colonne resource_attribute contient également les champs suivants liés aux attentes :

  • snow.data_metric.expectation_id : identificateur généré par le système.

  • snow.data_metric.expectation_name : nom de l’attente lorsqu’elle a été ajoutée à l’association.

  • snow.data_metric.expectation_expression : expression de l’attente.

Après avoir déterminé qu’une ligne correspond à l’évaluation d’une attente, vous pouvez consulter la colonne value pour savoir si l’attente a été violée. Si TRUE, l’attente a été violée.

Vue DATA_QUALITY_MONITORING_EXPECTATION_STATUS

Le Vue DATA_QUALITY_MONITORING_EXPECTATION_STATUS qui existe dans le schéma SNOWFLAKE.LOCAL, aplatit les informations du tableau des événements afin de faciliter l’accès aux résultats DMF.

Fonction DATA_QUALITY_MONITORING_EXPECTATION_STATUS

La fonction de table :doc:`/sql-reference/functions/data_quality_monitoring_expectation_status`renvoie des lignes qui fournissent les mêmes informations que celles disponibles dans la vue DATA_QUALITY_MONITORING_EXPECTATION_STATUS. La fonction utilise un modèle de contrôle d’accès différent de celui de la vue.

Suivre l’utilisation des attentes

Snowflake suit toutes les attentes de votre compte. Vous pouvez :ref:`exécuter une fonction <label-expectations_monitor_function>`ou :ref:`interroger une vue ACCOUNT_USAGE <label-expectations_monitor_view>`pour surveiller l’utilisation des attentes, y compris pour effectuer les tâches suivantes :

  • Surveiller les objets ont une attente définie pour leur association avec une DMF.

  • Surveiller quelles DMFs ont une attente définie pour leur association avec un objet.

  • Déterminer s’il existe une attente définie pour une association spécifique entre un objet et une DMF.

  • Déterminer l’expression booléenne d’une attente pour mieux comprendre un contrôle de qualité des données.

Exécuter une fonction de suivi des attentes

Vous pouvez exécuter la fonction DATA_METRIC_FUNCTION_EXPECTATIONS pour afficher les attentes définies pour un objet spécifique, un DMFspécifique, ou l’association entre un objet et une DMF.

Exemple : des attentes qui existent pour un objet spécifique

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

Exemple : les attentes qui existent pour une DMFspécifique

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
Copy

Exemple : les attentes qui existent pour une association spécifique entre un objet et une DMF

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT',
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

Interroger une vue pour suivre les attentes

Le Vue DATA_METRIC_FUNCTION_EXPECTATIONS dans le schéma ACCOUNT_USAGE contient toutes les attentes de votre compte. Vous pouvez interroger la vue pour suivre l’utilisation des attentes dans votre compte et déterminer l’expression booléenne de chaque attente.

Exemple : renvoyer toutes les attentes de votre compte Snowflake

SELECT * FROM snowflake.account_usage.data_metric_function_expectations
  ORDER BY expectation_name;
Copy

Exemple : identifier les attentes pour une fonction de métrique des données spécifique

SELECT expectation_name,
    ref_database_name as object_database,
    ref_schema_name as object_schema,
    ref_entity_name as object_name
  FROM snowflake.account_usage.data_metric_function_expectations
  WHERE
    metric_database_name = 'SNOWFLAKE' AND
    metric_schema_name = 'CORE' AND
    metric_name = 'ROW_COUNT'
  ORDER BY expectation_name;
Copy