Fonctions de mesure des données personnalisées

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.

Création d’une DMF personnalisée

Les exemples suivants montrent comment utiliser la commande CREATE DATA METRIC FUNCTION pour créer une DMF personnalisée.

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

Créez une DMF qui appelle la fonction COUNT pour renvoyer le nombre total de lignes comportant des nombres positifs dans trois 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.

Test d’une DMF personnalisée

Vous pouvez exécuter manuellement une DMF personnalisée afin de la tester avant de l’associer à une ou plusieurs tables. Pour plus d’informations, voir Appeler manuellement une DMF.

Sécurisation d’une DMF personnalisée

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

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 |
+-----------+---------------------------------------------------------------------+

Définition d’une balise sur une DMF personnalisée

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

Suppression d’une DMF personnalisée

Vous pouvez utiliser la commande DROP FUNCTION pour supprimer une fonction de métrique de données personnalisée du système.

Note

Vous ne pouvez pas supprimer une DMF personnalisée du système tant qu’elle est associée à une table ou à une vue. Utilisez la fonction DATA_METRIC_FUNCTION_REFERENCES pour identifier les tables et les vues pour lesquelles une fonction de mesure des données a été définie.

Pour obtenir des informations sur la suppression des associations DMF d’une table ou d’une vue, voir Supprimer une DMF à partir d’un objet.

Supprimez une DMF personnalisée du système :

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