Utilisation de fonctions de métrique des données

Avant d’essayer chacun des exemples de cette rubrique, assurez-vous que le rôle que vous utilisez répond aux exigences nécessaires en matière de contrôle d’accès.

Mesurez maintenant : exemple de DMF système

Utilisez la syntaxe suivante pour appeler une DMF :

SELECT <data_metric_function>(<query>)
Copy

Où :

data_metric_function

Spécifie une DMF définie par le système ou par l’utilisateur.

query

Spécifie une requête SQL sur une table ou une vue.

Les colonnes de la requête doivent correspondre aux arguments des colonnes dans la signature de DMF.

Note

Ces systèmes DMFs ne suivent pas cette syntaxe, car ils n’acceptent pas d’arguments :

Appelez une DMF système pour commencer à mesurer immédiatement la qualité de vos données.

Par exemple, appelez la DMF système NULL_COUNT (fonction de métrique des données système) pour voir le nombre de valeurs NULL dans la colonne SSN (c’est-à-dire, numéro de sécurité socialeUS) :

USE ROLE data_engineer;
SELECT SNOWFLAKE.CORE.NULL_COUNT(
  SELECT ssn
  FROM hr.tables.empl_info
);
Copy

Vous pouvez interroger la table d’événements pour en voir les résultats. Pour plus d’informations, voir Afficher les résultats de la DMF.

Créez votre propre DMF

Utilisez la commande CREATE DATA METRIC FUNCTION pour créer vos propres DMFs.

Créez une DMF qui appelle la fonction COUNT pour renvoyer le nombre total de lignes qui ne contiennent pas de valeurs NULL lors de l’évaluation des trois premières colonnes de la table :

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy

Pour un exemple qui fait référence à une table autre que celle à laquelle vous avez attribué la DMF, voir Exemple : Référence à une clé étrangère.

Note

Si vous souhaitez voir la définition de la DMF, utilisez la commande DESCRIBE FUNCTION (DMF).

Voir les propriétés d’une DMF

Décrivez la DMF pour en voir les propriétés :

DESC FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
+-----------+---------------------------------------------------------------------+
| property  | value                                                               |
+-----------+---------------------------------------------------------------------+
| signature | (ARG_T TABLE(ARG_C1 NUMBER, ARG_C2 NUMBER, ARG_C3 NUMBER))          |
| returns   | NUMBER(38,0)                                                        |
| language  | SQL                                                                 |
| body      | SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 |
+-----------+---------------------------------------------------------------------+

Sécuriser la DMF

Faites de la DMF une DMF sûre :

ALTER FUNCTION governance.dmfs.count_positive_numbers(
 TABLE(
   NUMBER,
   NUMBER,
   NUMBER
))
SET SECURE;
Copy

Dresser la liste de vos DMFs

Utilisez la commande SHOW DATA METRIC FUNCTIONS ou SHOW FUNCTIONS pour dresser la liste des DMFs de votre compte, votre base de données ou votre schéma :

SHOW DATA METRIC FUNCTIONS IN ACCOUNT;
Copy

Vous pouvez également interroger la vue FUNCTIONS Information Schema ou FUNCTIONS Account Usage pour obtenir la liste de vos DMFs dans la base de données spécifiée ou de votre compte, respectivement.

La colonne is_data_metric s’il s’agit d’une fonction DMF.

Définir une balise sur une DMF

Utilisez la commande ALTER FUNCTION pour définir une balise sur une DMF :

ALTER FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(NUMBER, NUMBER, NUMBER))
  SET TAG governance.tags.quality = 'counts';
Copy

Planifiez l’exécution de vos DMFs

Vous pouvez planifier l’exécution de vos DMFs pour automatiser les mesures de qualité des données sur une table.

Snowflake utilise le rôle de propriétaire de la table, qui est le rôle disposant du privilège OWNERSHIP sur la table, pour appeler la DMF planifiée. Le rôle de propriétaire de la table doit disposer de ces attributions :

  • Le privilège USAGE sur la DMF définie par l’utilisateur et le privilège USAGE sur la base de données et le schéma qui stockent la DMF définie par l’utilisateur.

  • Le rôle de base de données DATA_METRIC_USER si la DMF est une DMF système.

  • Le privilège EXECUTE DATA METRIC FUNCTION sur le compte.

Le paramètre d’objet DATA_METRIC_SCHEDULE d’une table, d’une vue ou d’une vue matérialisée vous permet de planifier l’exécution de vos DMFs. Toutes les fonctions de métrique des données de la table ou de la vue suivent la même planification.

Il existe trois façons de planifier l’exécution de votre DMF :

  • Définissez la DMF pour qu’elle s’exécute après un certain nombre de minutes.

  • Utilisez une expression cron pour planifier l’exécution de la DMF à une fréquence particulière.

  • Utilisez un déclencheur pour planifier l’exécution de DMF en cas de modification d’une DML dans la table, par exemple l’insertion d’une nouvelle ligne dans la table. Cependant :

Par exemple :

Réglez la planification de la fonction de métrique des données de sorte qu’elle s’exécute toutes les 5 minutes :

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

Réglez la planification de la fonction de métrique des données de sorte qu’elle s’exécute tous les jours à 8:00 AM :

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Copy

Réglez la planification de la fonction de métrique des données de sorte qu’elle s’exécute à 8:00 AM les jours de la semaine uniquement :

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Copy

Réglez la planification de la fonction de métrique des données de sorte qu’elle s’exécute trois fois par jour à 06:00, 12:00, et 18:00 UTC :

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Copy

Réglez la fonction de métrique des données de sorte qu’elle s’exécute lorsqu’une opération DML générale telle que l’insertion d’une nouvelle ligne modifie la table :

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Copy

Vous pouvez utiliser la commande SHOW PARAMETERS pour visualiser la planification d’une DMF pour un objet de table pris en charge.

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;
Copy
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| key                  | value                          | default | level | description                                                                                                                  | type   |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| DATA_METRIC_SCHEDULE | USING CRON 0 6,12,18 * * * UTC |         | TABLE | Specify the schedule that data metric functions associated to the table must be executed in order to be used for evaluation. | STRING |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+

Pour les objets de vue et de vue matérialisée, indiquez TABLE comme domaine d’objet et vérifiez la planification comme suit :

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
Copy

Note

Il y a un délai de 10 minutes entre le moment où vous modifiez la DMF d’une table et le moment où les changements de planification prennent effet sur les DMFs précédentes attribuées à la table. Cependant, les nouvelles affectations de DMF ne sont pas soumises au délai de 10 minutes. Planifiez soigneusement les opérations de planification de DMF et de suppression de DMF afin de les aligner sur les coûts de DMF prévus.

De plus, lorsque vous évaluez les résultats de DMF, par exemple en interrogeant la vue DATA_QUALITY_MONITORING_RESULTS, spécifiez la colonne measurement_time de votre requête comme base pour l’évaluation. Il existe un processus interne qui initie l’évaluation de DMF, et des mises à jour de table, comme les opérations INSERT, peuvent survenir entre l’heure programmée et l’heure de la mesure. Lorsque vous utilisez la colonne measurement_time, vous avez une évaluation plus précise des résultats de DMF, car l’heure de la mesure indique l’heure d’évaluation de la DMF.

Ajouter ou supprimer une DMF sur une table ou une vue

Utilisez une commande ALTER TABLE ou ALTER VIEW pour effectuer les opérations suivantes :

  • Ajouter une DMF à une table à l’aide de ALTER TABLE.

    ALTER TABLE t
      ADD DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
      ON (c1, c2, c3);
    
    Copy
  • Supprimez une DMF d’une table à l’aide d’une commande ALTER TABLE.

    ALTER TABLE t
      DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
      ON (c1, c2, c3);
    
    Copy

Note

Utilisez la commande ALTER VIEW pour ajouter une DMF dans une colonne de vue matérialisée ou pour supprimer une DMF d’une colonne de vue matérialisée.

Suivre les références des DMF

Vous pouvez interroger la vue Account Usage DATA_METRIC_FUNCTION_REFERENCES pour voir les références de la DMF dans votre compte ou appeler la fonction de table Information Schema DATA_METRIC_FUNCTION_REFERENCES pour identifier les DMFs associées à une table ou à une vue donnée ou les tables ou les vues associées à une DMF donnée.

Par exemple :

Renvoie une ligne pour chaque objet (table ou vue) pour lequel la DMF nommée count_positive_numbers a été définie sur cette table ou cette vue :

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      METRIC_NAME => 'governance.dmfs.count_positive_numbers'
    )
  );
Copy

Renvoie une ligne pour chaque DMF affectée à la table nommée hr.tables.empl_info :

USE DATABASE governance;
USE SCHEMA INFORMATION_SCHEMA;
SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      REF_ENTITY_NAME => 'hr.tables.empl_info',
      REF_ENTITY_DOMAIN => 'table'
    )
  );
Copy

Appeler manuellement votre DMF

Utilisez la syntaxe suivante pour appeler une DMF :

SELECT <data_metric_function>(<query>)
Copy

Où :

data_metric_function

Spécifie une DMF définie par le système ou par l’utilisateur.

query

Spécifie une requête SQL sur une table ou une vue.

Les colonnes de la requête doivent correspondre aux arguments des colonnes dans la signature de DMF.

Note

Ces systèmes DMFs ne suivent pas cette syntaxe, car ils n’acceptent pas d’arguments :

Appelez directement la DMF et affichez les résultats :

SELECT governance.dmfs.count_positive_numbers(
    SELECT c1,
           c2,
           c3
    FROM t
  );
Copy

Lorsque vous définissez une DMF sur une table ou une vue et que vous planifiez son exécution, vous pouvez effectuer une requête sur la vue construite à partir de la table d’événements pour afficher les résultats. Pour plus d’informations, voir Afficher les résultats de la DMF.

Afficher les résultats de la DMF

Pour voir les résultats de la DMF, vous devez d’abord gérer l’accès aux résultats, puis choisir comment afficher les résultats :

Gestion de l’accès aux résultats de la DMF

Vous avez trois options pour accéder aux résultats d’une DMF programmée. Elles sont détaillées dans la section suivante :

Selon la manière dont vous souhaitez gérer l’accès aux résultats de la DMF, accordez les rôles d’application système suivants à un autre rôle au niveau du compte :

Rôle de l’application

Remarques

DATA_QUALITY_MONITORING_ADMIN

Peut utiliser les options 1, 2 et 3.

Un rôle auquel est attribué ce rôle d’application peut accorder les rôles d’application DATA_QUALITY_MONITORING_VIEWER et DATA_QUALITY_MONITORING_LOOKUP à d’autres rôles.

Un utilisateur qui se voit accorder le rôle ACCOUNTADMIN peut accorder le rôle d’application DATA_QUALITY_MONITORING_ADMIN à d’autres rôles.

DATA_QUALITY_MONITORING_VIEWER

Options 2 et 3.

DATA_QUALITY_MONITORING_LOOKUP

Option 3 seulement.

Par exemple, utilisez la commande GRANT APPLICATION ROLE pour attribuer le rôle d’application système DATA_QUALITY_MONITORING_VIEWER au rôle personnalisé analyst :

USE ROLE ACCOUNTADMIN;
GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE analyst;
Copy

Utilisez la commande REVOKE APPLICATION ROLE pour révoquer le rôle d’application système d’un rôle de compte.

Astuce

De plus, si vous souhaitez gérer l’accès aux résultats de DMFs système, accordez le rôle de base de données SNOWFLAKE.DATA_METRIC_USER au rôle de compte qui peut accéder aux résultats. Pour plus d’informations, voir GRANT DATABASE ROLE.

Options

Pour afficher les résultats d’une DMF programmée, choisissez l’une des options suivantes :

Option 1 : interroger la table d’événements dédiée

Cette option vous donne accès aux données brutes, et vous avez plus de liberté pour post-traiter les données à l’aide d’objets dérivés, tels que la création de vues, de fonctions de table ou de procédures stockées, en fonction de la manière dont vous souhaitez analyser les résultats. En outre, si vous créez ces objets dérivés, vous pouvez accorder l’accès à ces objets de manière sélective à différents rôles. Par exemple, un ingénieur des données peut accéder aux procédures stockées pour gérer l’approche permettant d’obtenir les résultats, et un analyste des données peut accéder à la vue pour analyser les résultats.

La table d’événements est nommée SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW.

Pour plus d’informations sur les colonnes de la table d’événements, voir Colonnes de table d’événements.

Pour un exemple représentatif d’interrogation de la table d’événements, voir le tutoriel sur la journalisation et le traçage.

Option 2 : interroger la vue DATA_QUALITY_MONITORING_RESULTS

Cette option vous permet d’interroger la vue DATA_QUALITY_MONITORING_RESULTS, qui aplatit les données brutes de la table d’événements pour faciliter l’accès aux résultats de la DMF. En outre, cette option est préférable lorsque le post-traitement des données n’est pas nécessaire et que vous ne souhaitez pas accorder l’accès aux données brutes.

La vue existe dans le schéma LOCAL de la base de données partagée SNOWFLAKE : SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS.

Pour plus d’informations, voir la vue DATA_QUALITY_MONITORING_RESULTS.

Note

Le rôle de base de données SNOWFLAKE.GOVERNANCE_VIEWER n’a pas accès à la requête de la vue DATA_QUALITY_MONITORING_RESULTS.

Option 3 : appeler la fonction de table DATA_QUALITY_MONITORING_RESULTS

Cette option vous permet d’appeler la fonction de table DATA_QUALITY_MONITORING_RESULTS pour afficher les résultats de la DMF. La fonction renvoie les mêmes colonnes que la vue DATA_QUALITY_MONITORING_RESULTS. Cependant, vous ne pouvez spécifier qu’une seule table lors de l’appel de la fonction. Cette option est idéale lorsque vous souhaitez limiter les résultats de la fonction de la métrique des données à une seule table et que vous ne souhaitez pas fournir d’accès aux mesures d’autres tables ou à la table d’événements.

En plus du rôle d’application SNOWFLAKE.DATA_QUALITY_MONITORING_LOOKUP, le rôle utilisé pour appeler la fonction de table DATA_QUALITY_MONITORING_RESULTS nécessite également les privilèges suivants :

  • OWNERSHIP ou SELECT sur la table.

  • OWNERSHIP ou USAGE sur la DMF.

Supprimer la DMF du système

Supprimez la DMF du système :

DROP FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy

Limitations

Pour plus d’informations, consultez la section sur les limitations de la qualité des données.