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.

Créez votre propre DMF

S’il n’existe pas de fonction de mesure de la qualité des données du système (DMF) qui puisse effectuer vos contrôles de qualité des données, vous pouvez utiliser la commande CREATE DATA METRIC FUNCTION pour créer votre propre DMF.

Exemple : DMF définie par l’utilisateur avec un seul argument de table

Créer une DMF qui appelle la fonction COUNT pour renvoyer le nombre total de lignes contenant des nombres positifs dans les 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
Exemple : Utilisation de plusieurs arguments de table pour effectuer des contrôles de référence

Une DMF définie par l’utilisateur peut avoir plusieurs arguments acceptant une table. Lorsque vous ajoutez la DMF à une table, cette table est utilisée comme premier argument. Si un argument supplémentaire accepte une table, vous devez également spécifier le nom complet de la seconde table. Cette capacité simplifie l’intégrité référentielle, la mise en correspondance et la comparaison, ou le contrôle conditionnel entre différents ensembles de données.

Supposons que vous souhaitiez valider l’intégrité référentielle telle qu’elle est définie par une relation clé primaire/clé étrangère. Dans ce cas, vous pouvez créer une DMF pour valider que tous les enregistrements d’une table source ont des enregistrements correspondants dans la table référencée. La DMF suivante, définie par l’utilisateur, renvoie le nombre d’enregistrements pour lesquels la valeur d’une colonne d’une table n’a pas de valeur correspondante dans la colonne d’une autre table :

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.referential_check(
  arg_t1 TABLE (arg_c1 INT), arg_t2 TABLE (arg_c2 INT))
RETURNS NUMBER AS
 'SELECT COUNT(*) FROM arg_t1
  WHERE arg_c1 NOT IN (SELECT arg_c2 FROM arg_t2)';
Copy

Supposons maintenant que vous souhaitiez vérifier que chaque commande, identifiée par son sp_id, dans la table salesorders, est mappée à un sp_id dans la table salespeople. Vous pouvez ajouter la DMF à la table salesorders tout en spécifiant la table salespeople comme autre argument de la table.

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION governance.dmfs.referential_check
    ON (sp_id, TABLE (my_db.sch1.salespeople(sp_id)));
Copy

La sortie renvoie le nombre de lignes de la table salesorders dont la colonne sp_id contient une valeur qui n’apparaît pas dans la colonne sp_id de la table salespeople. Une valeur supérieure à 0 indique qu’il y a des valeurs sp_id dans salesorders qui ne sont pas mappées à des enregistrements dans salespeople.

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.

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.

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.

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.

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

Vous pouvez utiliser la commande ALTER FUNCTION pour sécuriser un DMF. Pour plus d’informations sur la signification d’une fonction en termes de sécurité, voir Protection des informations sensibles avec les UDFs et les procédures stockées sécurisées.

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 Information Schema FUNCTIONS ou la vue Account Usage FUNCTIONS pour obtenir la liste de vos DMFs dans la base de données spécifiée ou dans votre compte.

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

Suivre les références des DMF

Vous pouvez interroger la vue DATA_METRIC_FUNCTION_REFERENCES Account Usage pour voir les références DMF dans votre compte. Vous pouvez également appeler la fonction de table DATA_METRIC_FUNCTION_REFERENCES Information Schema pour identifier les DMFs associées à une table ou à une vue donnée ou les tables ou 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

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.