Benutzerdefinierte Funktionen für Datenmetriken

Wenn es keine Systemfunktion für Datenqualitätsmetriken (DMF) gibt, die Ihre Datenqualitätsprüfungen durchführen kann, dann können Sie den Befehl CREATE DATA METRIC FUNCTION verwenden, um Ihre eigene DMF zu erstellen.

Eine benutzerdefinierte DMF erstellen

Die folgenden Beispiele zeigen, wie Sie mit dem Befehl CREATE DATA METRIC FUNCTION eine eigene DMF erstellen können.

Beispiel: Benutzerdefinierte DMF mit einem einzigen Tabellenargument

Erstellen Sie eine DMF, die die Funktion COUNT aufruft, um die Gesamtzahl der Zeilen zurückzugeben, die positive Zahlen in drei Spalten der Tabelle haben:

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
Beispiel: Verwendung mehrerer Tabellenargumente zur Durchführung referenzieller Prüfungen

Eine benutzerdefinierte DMF kann mehr als ein Argument haben, das eine Tabelle akzeptiert. Wenn Sie die DMF zu einer Tabelle hinzufügen, wird diese Tabelle als erstes Argument verwendet. Wenn es ein zusätzliches Argument gibt, das eine Tabelle akzeptiert, müssen Sie auch den vollqualifizierten Namen der zweiten Tabelle angeben. Diese Funktion vereinfacht die referenzielle Integrität, den Abgleich und den Vergleich oder die bedingte Prüfung über verschiedene Datensätze hinweg.

Angenommen, Sie möchten die referenzielle Integrität überprüfen, die durch eine Primärschlüssel/Fremdschlüssel-Beziehung definiert ist. In diesem Fall können Sie eine DMF erstellen, um zu überprüfen, ob alle Datensätze in einer Quelltabelle entsprechende Datensätze in der referenzierten Tabelle haben. Die folgende benutzerdefinierte DMF gibt die Anzahl der Datensätze zurück, bei denen der Wert einer Spalte in einer Tabelle nicht mit einem entsprechenden Wert in der Spalte einer anderen Tabelle übereinstimmt:

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

Nehmen wir nun an, Sie möchten überprüfen, ob jede Bestellung, die durch ihren sp_id in der Tabelle salesorders identifiziert wird, einer sp_id in der Tabelle salespeople zugeordnet ist. Sie können die DMF zur Tabelle salesorders hinzufügen, während Sie die Tabelle salespeople als anderes Tabellenargument angeben.

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

Die Ausgabe liefert die Anzahl der Zeilen in der Tabelle salesorders, die einen Wert in der Spalte sp_id haben, der nicht in der Spalte sp_id der Tabelle salespeople erscheint. Ein Wert größer als 0 bedeutet, dass es sp_id Werte in salesorders gibt, die nicht den Datensätzen in salespeople zugeordnet werden können.

Eine benutzerdefinierte DMF testen

Sie können eine benutzerdefinierte DMF manuell ausführen, um sie zu testen, bevor Sie sie mit einer oder mehreren Tabellen verknüpfen. Weitere Informationen dazu finden Sie unter Eine DMF aufrufen.

Die benutzerdefinierte DMF sichern

Sie können den Befehl ALTER FUNCTION verwenden, um eine DMF zu sichern. Weitere Informationen darüber, was es bedeutet, dass eine Funktion sicher ist, finden Sie unter Schutz sensibler Informationen mit sicheren UDFs und gespeicherten Prozeduren.

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

Eigenschaften einer DMF anzeigen

Beschreiben Sie die DMF, um ihre Eigenschaften anzuzeigen:

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

Ein Tag auf eine benutzerdefinierte DMF setzen

Verwenden Sie den Befehl ALTER FUNCTION, um ein Tag auf eine DMF zu setzen.

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

Eine benutzerdefinierte DMF löschen

Sie können den Befehl DROP FUNCTION verwenden, um eine benutzerdefinierte Datenmetrikfunktion aus dem System zu entfernen.

Bemerkung

Sie können eine benutzerdefinierte DMF nicht aus dem System löschen, solange sie noch mit einer Tabelle oder Ansicht verknüpft ist. Verwenden Sie die Funktion DATA_METRIC_FUNCTION_REFERENCES, um die Tabellen und Ansichten zu identifizieren, für die eine Datenmetrikfunktion festgelegt wurden.

Informationen zum Entfernen von DMF-Verknüpfungen aus einer Tabelle oder Ansicht finden Sie unter Eine DMF aus einem Objekt löschen.

Eine benutzerdefinierte DMF aus dem System öschen:

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