Datenmetrikfunktionen verwenden, um Datenqualitätsprüfungen durchzuführen¶
Unter diesem Thema wird beschrieben, wie Sie eine Datenmetrikfunktion (DMF) mit einer Tabelle oder Ansicht verknüpfen, damit diese in regelmäßigen Abständen eine Datenqualitätsprüfung durchführt. Es wird auch beschrieben, wie Sie DMF direkt aufrufen können, z. B. wenn Sie eine DMF testen möchten, bevor Sie sie mit einer Tabelle oder Ansicht verknüpfen.
Eine DMF verknüpfen, um Datenqualitätsprüfungen zu automatisieren¶
Sie können eine DMF mit einer Tabelle oder Ansicht verknüpfen, um sie automatisch in regelmäßigen Abständen aufzurufen. Bei der Zuordnung von der DMF geben Sie an, welche Spalten als Argumente an die DMF übergeben werden.
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);
Einige DMFs akzeptieren keine Spalte als Argument. Um beispielsweise die ROW_COUNT-System-DMF mit der Ansicht v2 zu verknüpfen, führen Sie den folgenden Befehl aus:
ALTER VIEW v2
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT
ON ();
Die ACCEPTED_VALUES DMF enthält einen Lambda-Ausdruck sowie den Spaltennamen, mit dem Sie überprüfen können, wie viele Datensätze nicht mit einem erwarteten Wert übereinstimmen. Die folgende Anweisung verknüpft beispielsweise die Funktion mit der Tabelle t1, sodass die Funktion die Anzahl der Datensätze zurückgibt, bei denen der Wert der Spalte age nicht gleich fünf ist.
ALTER TABLE t1
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (age, age -> age = 5);
Eine DMF aus einem Objekt löschen¶
Sie können eine DMF mit einem ALTER TABLE- oder ALTER VIEW-Befehl löschen. Beispiel:
ALTER TABLE t DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
Zeitplan für DMFs anpassen¶
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:
Stellen Sie die DMF so ein, dass die nach einer bestimmten Anzahl von Minuten ausgeführt wird.
Verwenden Sie einen cron-Ausdruck, um die Ausführung der DMF mit einer bestimmten Häufigkeit zu planen.
Verwenden Sie ein Trigger-Ereignis, um die DMF so zu planen, dass sie ausgeführt wird, wenn eine DML-Änderung an der Tabelle vorgenommen wird, z. B. das Einfügen einer neuen Zeile in die Tabelle. Allerdings:
Das Reclustering von Tabellen löst keinen DMF-Trigger aus.
Der Trigger-Ansatz ist nur für bestimmte Arten von Tabellen verfügbar. Weitere Informationen dazu finden Sie unter ALTER TABLE … SET DATA_METRIC_SCHEDULE.
Beispiel:
Stellen Sie den Zeitplan der Datenmetrikfunktion so ein, dass sie alle 5 Minuten ausgeführt wird:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = '5 MINUTE';
Stellen Sie den Zeitplan der Datenmetrikfunktion so ein, dass sie täglich um 8:00 Uhr ausgeführt wird:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Stellen Sie den Zeitplan der Datenmetrikfunktion so ein, dass sie nur an Wochentagen um 8:00 Uhr ausgeführt wird:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Stellen Sie den Zeitplan der Datenmetrikfunktion so ein, dass sie dreimal täglich um 0600, 1200 und 1800 UTC ausgeführt wird:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Stellen Sie die Datenmetrikfunktion so ein, dass sie ausgeführt wird, wenn eine allgemeine DML-Operation, wie z. B. das Einfügen einer neuen Zeile, die Tabelle verändert:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Sie können den Befehl SHOW PARAMETERS verwenden, um den DMF-Zeitplan für ein unterstütztes Tabellenobjekt anzuzeigen:
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 | +----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
Geben Sie für Ansichtsobjekte und materialisierte Ansichtsobjekte TABLE als Objektdomäne an, und überprüfen Sie den Zeitplan wie folgt:
SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
Bemerkung
Es gibt eine Verzögerung von 10 Minuten ab dem Zeitpunkt, an dem Sie die DMF von einer Tabelle aus ändern, bis alle Änderung im Zeitplan auf den vorherigen DMFs, die der Tabelle zugewiesen sind, wirksam werden. Neue DMF-Zuweisungen an die Tabelle unterliegen jedoch nicht der 10-minütigen Verzögerung. Planen Sie die DMF-Zeitplanungs- und DMF-Rücksetzoperationen sorgfältig, um sie mit Ihren erwarteten DMF-Kosten in Einklang zu bringen.
Wenn Sie die Ergebnisse von DMF evaluieren, indem Sie die Ansicht DATA_QUALITY_MONITORING_RESULTS abfragen, geben Sie außerdem die Spalte measurement_time in Ihrer Abfrage als Grundlage für die Evaluation. Es gibt einen internen Prozess, der die Auswertung von DMF initiiert, und es ist möglich, dass zwischen dem geplanten Zeitpunkt und dem Messzeitpunkt Tabellenaktualisierungen, wie z. B. INSERT-Operationen, stattfinden können. Wenn Sie die Spalte measurement_time verwenden, erhalten Sie eine präzisere Beurteilung der Ergebnisse von DMF, da die Messzeit die Bewertungszeit von DMF angibt.
DMFs anhalten¶
Sie können eine DMF anhalten, um zu verhindern, dass sie ausgeführt wird, obwohl sie mit einer Tabelle verbunden ist. Alternativ können Sie mit einer einzigen Anweisung auch alle DMFs anhalten, die einer Tabelle zugeordnet sind.
Um eine bestimmte DMF anzuhalten, die einer Tabelle zugeordnet ist, ändern Sie die Zuordnung, um den Parameter SUSPEND festzulegen. Beispiel:
ALTER TABLE t1 MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON ( col1 ) SUSPEND;
Um die Ausführung der DMFfortzusetzen, verwenden Sie eine andere MODIFY DATA METRIC FUNCTION-Anweisung zum Festlegen des Parameters RESUME.
Um alle DMFs anzuhalten, die einer Tabelle zugeordnet sind, setzen den Zeitplan der Tabelle auf eine leere Zeichenfolge. Beispiel:
ALTER TABLE t1 SET DATA_METRIC_SCHEDULE = '';
Zum Fortsetzen der DMFs geben Sie einen gültigen Wert für den Parameter DATA_METRIC_SCHEDULE ein.
Eine DMF aufrufen¶
Ein direkter Aufruf einer DMF kann nützlich sein, um die Ausgabe der DMF zu testen, bevor sie mit einer Tabelle oder Ansicht verknüpft wird.
Verwenden Sie die folgende Syntax, um eine DMF aufzurufen:
SELECT <data_metric_function>(<query>)
Wobei:
data_metric_functionGibt eine system- oder benutzerdefinierte DMF an.
queryGibt eine SQL-Abfrage auf einer Tabelle oder Ansicht an.
Die von der Abfrage projizierten Spalten müssen mit den Spaltenargumenten in der DMF-Signatur übereinstimmen.
Bemerkung
Die folgenden System-DMFs folgen dieser Syntax nicht, da sie keine Argumente entgegennehmen:
Um beispielsweise eine benutzerdefinierte DMF count_positive_numbers aufzurufen, die drei Spalten als Argumente akzeptiert, führen Sie den folgenden Befehl aus:
SELECT governance.dmfs.count_positive_numbers(
SELECT c1, c2, c3
FROM t);
Um beispielsweise die NULL_COUNT (System-Datenmetrikfunktion)-System-DMF aufzurufen, um die Anzahl der NULL-Werte in der ssn-Spalte anzuzeigen, führen Sie den folgenden Befehl aus:
SELECT SNOWFLAKE.CORE.NULL_COUNT(
SELECT ssn
FROM hr.tables.empl_info);
Wenn eine kundenspezifische DMF Argumente aus mehreren Tabellen akzeptiert, muss jede Abfrage, die eine Spalte projiziert, in Klammern eingeschlossen werden. Wenn Sie z. B. die REFERENTIAL_CHECK DMF manuell aufrufen möchten, führen Sie Folgendes aus:
SELECT referential_check( (SELECT id FROM salesorders), (SELECT id FROM salespeople) );