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 $$;
- 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)';
Nehmen wir nun an, Sie möchten überprüfen, ob jede Bestellung, die durch ihren
sp_id
in der Tabellesalesorders
identifiziert wird, einersp_id
in der Tabellesalespeople
zugeordnet ist. Sie können die DMF zur Tabellesalesorders
hinzufügen, während Sie die Tabellesalespeople
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)));
Die Ausgabe liefert die Anzahl der Zeilen in der Tabelle
salesorders
, die einen Wert in der Spaltesp_id
haben, der nicht in der Spaltesp_id
der Tabellesalespeople
erscheint. Ein Wert größer als 0 bedeutet, dass essp_id
Werte insalesorders
gibt, die nicht den Datensätzen insalespeople
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;
Eigenschaften einer DMF anzeigen¶
Beschreiben Sie die DMF, um ihre Eigenschaften anzuzeigen:
DESC FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER, NUMBER, NUMBER
)
);
+-----------+---------------------------------------------------------------------+
| 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';
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
)
);