Utilisation des fonctions de métrique des données pour effectuer des contrôles de qualité des données¶
Ce sujet explique comment associer une fonction de métrique des données (DMF) à une table ou à une vue afin qu’elle effectue un contrôle de la qualité des données à intervalles réguliers. Il décrit également comment appeler directement une DMF, par exemple si vous souhaitez tester une DMF avant de l’associer à une table ou à une vue.
Association d’une DMF pour automatiser les contrôles de qualité des données¶
Vous pouvez associer une DMF à une table ou à une vue pour l’appeler automatiquement à intervalles réguliers. Lorsque vous associez une DMF, vous spécifiez les colonnes qui sont transmises à la DMF en tant qu’arguments.
Use an ALTER TABLE or ALTER VIEW command to associate a DMF and specify which
columns are passed as arguments. For example, the following command associates the NULL_COUNT system DMF with table t. When the
DMF runs, it will return the number of NULL values in the column c1.
ALTER TABLE t
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT
ON (c1);
Certaines DMFs n’acceptent pas les colonnes comme argument. Par exemple, pour associer la DMF système ROW_COUNT à la vue v2, exécutez la commande suivante :
ALTER VIEW v2
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT
ON ();
La DMF ACCEPTED_VALUES contient une expression lambda ainsi que le nom de la colonne, ce qui vous permet de vérifier combien d’enregistrements ne correspondent pas à une valeur attendue. Par exemple, l’instruction suivante associe la fonction à la table t1. La fonction renvoie donc le nombre d’enregistrements où la valeur de la colonne age n’est pas égale à cinq.
ALTER TABLE t1
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (age, age -> age = 5);
Supprimer une DMF à partir d’un objet¶
Vous pouvez supprimer une DMF à l’aide d’une commande ALTER TABLE ou ALTER VIEW. Par exemple :
ALTER TABLE t DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
Ajuster la planification pour les DMFs¶
The DATA_METRIC_SCHEDULE object parameter for a table, view, or materialized view controls how often DMFs run. By default, the schedule is set to one hour. All data metric functions on a table or view follow the same schedule.
You can use the following approaches to schedule your DMF to run:
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 :
Le reclustering des tables ne déclenche pas l’exécution d’une DMF.
L’approche de déclenchement n’est disponible que pour certains types de tables. Pour plus d’informations, voir ALTER TABLE … SET DATA_METRIC_SCHEDULE.
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';
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';
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';
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';
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';
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;+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+ | 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;
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.
Suspendre des DMFs¶
Vous pouvez suspendre une DMF pour l’empêcher de s’exécuter même si elle est associée à une table. Vous pouvez également suspendre toutes les DMFs associées à une table avec une seule instruction.
Pour suspendre une DMF spécifique associée à une table, modifiez l’association pour définir le paramètre SUSPEND. Par exemple :
ALTER TABLE t1 MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON ( col1 ) SUSPEND;
Pour reprendre l’exécution d’une DMF, utilisez une autre instruction MODIFY DATA METRIC FUNCTION pour définir le paramètre RESUME.
Pour suspendre toutes les DMFs associées à une table, définissez la planification de la table sur une chaîne vide. Par exemple :
ALTER TABLE t1 SET DATA_METRIC_SCHEDULE = '';
Pour relancer les DMFs, définissez le paramètre DATA_METRIC_SCHEDULE sur une valeur valide.
Appeler manuellement une DMF¶
L’appel direct à une DMF peut être utile pour tester la sortie de la DMF avant de l’associer à une table ou à une vue.
Utilisez la syntaxe suivante pour appeler une DMF :
SELECT <data_metric_function>(<query>)
Où :
data_metric_functionSpécifie une DMF définie par le système ou par l’utilisateur.
querySpécifie une requête SQL sur une table ou une vue.
Les colonnes projetées par la requête doivent correspondre aux arguments des colonnes dans la signature de la DMF.
Note
Les DMFs du système suivant ne respectent pas cette syntaxe, car elles ne prennent aucun argument :
Par exemple, pour appeler une DMF count_positive_numbers personnalisé, qui accepte trois colonnes comme arguments, exécutez la commande suivante :
SELECT governance.dmfs.count_positive_numbers(
SELECT c1, c2, c3
FROM t);
Par exemple, pour appeler 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, exécutez la commande suivante :
SELECT SNOWFLAKE.CORE.NULL_COUNT(
SELECT ssn
FROM hr.tables.empl_info);
Si une DMF personnalisé accepte des arguments de plusieurs tables, chaque requête qui projette une colonne doit être entre parenthèses. Par exemple, si vous voulez appeler manuellement la DMF REFERENTIAL_CHECK, exécutez ce qui suit :
SELECT referential_check( (SELECT id FROM salesorders), (SELECT id FROM salespeople) );