Verwenden von Datenmetrikfunktionen¶
Bevor Sie die Beispiele unter diesem Thema ausprobieren, vergewissern Sie sich, dass die von Ihnen verwendete Rolle die notwendigen Anforderungen an die Zugriffssteuerung erfüllt.
Jetzt messen: System-DMF-Beispiel¶
Verwenden Sie die folgende Syntax, um eine DMF aufzurufen:
SELECT <data_metric_function>(<query>)
Wobei:
data_metric_function
Gibt eine system- oder benutzerdefinierte DMF an.
query
Gibt eine SQL-Abfrage auf einer Tabelle oder Ansicht an.
Die Spalten in der Abfrage müssen mit den Spaltenargumenten in der DMF-Signatur übereinstimmen.
Bemerkung
Diese System-DMFs folgen nicht dieser Syntax, da sie keine Argumente entgegennehmen:
Rufen Sie eine System-DMF auf, um sofort mit der Messung Ihrer Datenqualität zu beginnen.
Rufen Sie zum Beispiel das System NULL_COUNT (System-Datenmetrikfunktion) DMF auf, um die Anzahl der NULL Werte in der Spalte SSN (US Sozialversicherungsnummer) anzuzeigen:
USE ROLE data_engineer;
SELECT SNOWFLAKE.CORE.NULL_COUNT(
SELECT ssn
FROM hr.tables.empl_info
);
Sie können die Ereignistabelle abfragen, um die Ergebnisse anzuzeigen. Weitere Informationen dazu finden Sie unter DMF-Ergebnisse anzeigen.
Eigene DMF erstellen¶
Verwenden Sie den Befehl CREATE DATA METRIC FUNCTION, um eigene DMFs zu erstellen.
Erstellen Sie eine DMF, die die Funktion COUNT aufruft, um die Gesamtzahl der Zeilen zurückzugeben, die keine NULL-Werte enthalten, wenn Sie die ersten drei Spalten der Tabelle auswerten:
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
$$;
Ein Beispiel, das auf eine andere Tabelle als die Tabelle verweist, der Sie die DMF zuweisen, finden Sie unter Beispiel: Fremdschlüsselreferenz.
Bemerkung
Wenn Sie die DMF-Definition anzeigen möchten, verwenden Sie den Befehl DESCRIBE FUNCTION (DMF).
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 |
+-----------+---------------------------------------------------------------------+
DMF sichern¶
Eine DMF zu einer sicheren DMF machen:
ALTER FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER,
NUMBER,
NUMBER
))
SET SECURE;
DMFs auflisten¶
Verwenden Sie den Befehl SHOW DATA METRIC FUNCTIONS oder SHOW FUNCTIONS, um DMFs in Ihrem Konto, Ihrer Datenbank oder Ihrem Schema aufzulisten:
SHOW DATA METRIC FUNCTIONS IN ACCOUNT;
Alternativ können Sie auch die Information Schema-Ansicht FUNCTIONS oder die Account Usage-Ansicht FUNCTIONS abfragen, um Ihre DMFs in der angegebenen Datenbank bzw. Ihrem Konto aufzulisten.
Die Spalte is_data_metric
gibt an, ob die Funktion eine DMF ist.
Tag auf eine 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';
Ausführung von DMFs planen¶
Sie können die Ausführung Ihrer DMFs planen, um die Datenqualitätsmessungen für eine Tabelle zu automatisieren.
Snowflake verwendet die Rolle des Tabelleneigentümers, d. h. die Rolle mit der Berechtigung OWNERSHIP für die Tabelle, um die geplante DMF aufzurufen. Die Rolle des Tabelleneigentümers muss über folgende Berechtigungen verfügen:
Die Berechtigung USAGE für die benutzerdefinierte DMF und die Berechtigung USAGE für die Datenbank und das Schema, in denen die benutzerdefinierte DMF gespeichert ist.
Die Datenbankrolle DATA_METRIC_USER, wenn die DMF eine System-DMF ist.
Die Berechtigung EXECUTE DATA METRIC FUNCTION für das Konto.
Mit dem Objektparameter DATA_METRIC_SCHEDULE für eine Tabelle, Ansicht oder materialisierte Ansicht können Sie planen, wann Ihre DMFs ausgeführt werden können. Alle Datenmetrikfunktionen in der Tabelle oder Ansicht folgen demselben Zeitplan.
Es gibt drei Möglichkeiten, die Ausführung Ihrer DMF zu planen:
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.
DMF auf einer Tabelle oder Ansicht hinzufügen oder anzeigen¶
Verwenden Sie einen ALTER TABLE- oder ALTER VIEW-Befehl, um Folgendes zu tun:
Fügen Sie eine DMF zu einer Tabelle hinzu, indem Sie ALTER TABLE verwenden.
ALTER TABLE t ADD DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
Löschen Sie eine DMF aus einer Tabelle mit einem ALTER TABLE-Befehl.
ALTER TABLE t DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
Bemerkung
Verwenden Sie den Befehl ALTER VIEW, um eine DMF zu einer Spalte der materialisierten Ansicht hinzuzufügen oder eine DMF aus einer Spalte der materialisierten Ansicht zu entfernen.
DMF-Referenzen verfolgen¶
Sie können die Account Usage-Ansicht DATA_METRIC_FUNCTION_REFERENCES abfragen, um die DMF-Referenzen in Ihrem Konto anzuzeigen, oder die Information Schema-Tabellenfunktion DATA_METRIC_FUNCTION_REFERENCES aufrufen, um die DMFs zu identifizieren, die mit einer gegebenen Tabelle oder Ansicht verbunden sind, bzw. die Tabellen oder Ansichten, die mit einer gegebenen DMF verbunden sind.
Beispiel:
Rückgabe einer Zeile für jedes Objekt (Tabelle oder Ansicht), auf dessen Tabelle oder Ansicht die DMF namens count_positive_numbers
gesetzt wurde:
USE DATABASE governance; USE SCHEMA INFORMATION_SCHEMA; SELECT * FROM TABLE( INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES( METRIC_NAME => 'governance.dmfs.count_positive_numbers' ) );
Rückgabe einer Zeile für jede DMF, die der Tabelle hr.tables.empl_info
zugewiesen ist:
USE DATABASE governance; USE SCHEMA INFORMATION_SCHEMA; SELECT * FROM TABLE( INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES( REF_ENTITY_NAME => 'hr.tables.empl_info', REF_ENTITY_DOMAIN => 'table' ) );
DMF manuell aufrufen¶
Verwenden Sie die folgende Syntax, um eine DMF aufzurufen:
SELECT <data_metric_function>(<query>)
Wobei:
data_metric_function
Gibt eine system- oder benutzerdefinierte DMF an.
query
Gibt eine SQL-Abfrage auf einer Tabelle oder Ansicht an.
Die Spalten in der Abfrage müssen mit den Spaltenargumenten in der DMF-Signatur übereinstimmen.
Bemerkung
Diese System-DMFs folgen nicht dieser Syntax, da sie keine Argumente entgegennehmen:
Rufen Sie die DMF direkt auf, und sehen Sie sich die Ergebnisse an:
SELECT governance.dmfs.count_positive_numbers(
SELECT c1,
c2,
c3
FROM t
);
Wenn Sie eine DMF auf eine Tabelle oder Ansicht setzen und deren Ausführung planen, können Sie die aus der Ereignistabelle erstellte Ansicht abfragen, um die Ergebnisse zu sehen. Weitere Informationen dazu finden Sie unter DMF-Ergebnisse anzeigen.
DMF-Ergebnisse anzeigen¶
Um die Ergebnisse der DMF anzuzeigen, müssen Sie zunächst den Zugriff auf die Ergebnisse verwalten und dann auswählen, wie die Ergebnisse angezeigt werden sollen:
Zugriffs auf die DMF-Ergebnisse verwalten¶
Sie haben drei Möglichkeiten, auf die Ergebnisse einer geplanten DMF zuzugreifen. Sie werden im nächsten Abschnitt näher erläutert:
Option 1: Abfrage der dedizierten Ereignistabelle
Option 2: Abfrage der Ansicht DATA_QUALITY_MONITORING_RESULTS, die eine vereinfachte Version der Ereignistabelle ist.
Option 3: Tabellenfunktion DATA_QUALITY_MONITORING_RESULTS aufrufen.
Je nachdem, wie Sie den Zugriff auf die Ergebnisse der DMF verwalten möchten, weisen Sie einer anderen Rolle auf Kontoebene die folgenden Systemanwendungsrollen zu:
Anwendungsrolle |
Anmerkungen |
---|---|
DATA_QUALITY_MONITORING_ADMIN |
Sie können die Optionen 1, 2 und 3 verwenden. Eine Rolle, der diese Anwendungsrolle zugewiesen wurde, kann anderen Rollen die Anwendungsrollen DATA_QUALITY_MONITORING_VIEWER und DATA_QUALITY_MONITORING_LOOKUP zuweisen. Ein Benutzer, dem die Rolle ACCOUNTADMIN zugewiesen wurde, kann anderen Rollen die Anwendungsrolle DATA_QUALITY_MONITORING_ADMIN zuweisen. |
DATA_QUALITY_MONITORING_VIEWER |
Optionen 2 und 3. |
DATA_QUALITY_MONITORING_LOOKUP |
Nur Option 3. |
Verwenden Sie zum Beispiel den Befehl GRANT APPLICATION ROLE, um der benutzerdefinierten Rolle analyst
die Systemanwendungsrolle DATA_QUALITY_MONITORING_VIEWER zuzuweisen:
USE ROLE ACCOUNTADMIN; GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE analyst;
Verwenden Sie den Befehl REVOKE APPLICATION ROLE, um die Systemanwendungsrolle von einer Kontorolle zu entziehen.
Tipp
Wenn Sie außerdem den Zugriff auf die Ergebnisse der System-DMFs verwalten möchten, erteilen Sie der Kontorolle, die auf die Ergebnisse zugreifen kann, die Datenbankrolle SNOWFLAKE.DATA_METRIC_USER. Weitere Informationen dazu finden Sie unter GRANT DATABASE ROLE.
Optionen¶
Um die geplanten DMF-Ergebnisse anzuzeigen, wählen Sie eine der folgenden Optionen aus:
Option 2: Abfrage der Ansicht DATA_QUALITY_MONITORING_RESULTS
Option 3: Tabellenfunktion DATA_QUALITY_MONITORING_RESULTS aufrufen
- Option 1: Abfrage der speziellen Ereignistabelle
Mit dieser Option haben Sie Zugriff auf die Rohdaten und können die Daten mit abgeleiteten Objekten nachbearbeiten, z. B. indem Sie Ansichten, Tabellenfunktionen oder gespeicherte Prozeduren erstellen, je nachdem, wie Sie die Ergebnisse analysieren möchten. Wenn Sie diese abgeleiteten Objekte erstellen, können Sie außerdem den Zugriff auf diese Objekte selektiv verschiedenen Rollen zuweisen. So kann beispielsweise ein Data Engineer auf die gespeicherten Prozeduren zugreifen, um den Ansatz zur Gewinnung der Ergebnisse zu pflegen, und ein Datenanalyst kann auf die Ansicht zugreifen, um die Ergebnisse zu analysieren.
Die Ereignistabelle heißt
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW
.Informationen zu den Spalten der Ereignistabelle finden Sie unter Spalten von Ereignistabellen.
Ein repräsentatives Beispiel für die Abfrage der Ereignistabelle finden Sie im Tutorial zu Protokollierung und Ablaufverfolgung.
- Option 2: Abfrage der Ansicht DATA_QUALITY_MONITORING_RESULTS
Mit dieser Option können Sie die Ansicht DATA_QUALITY_MONITORING_RESULTS abfragen, die die Rohdaten in der Ereignistabelle vereinfacht, um einen leichteren Zugriff auf die DMF-Ergebnisse zu ermöglichen. Außerdem ist diese Option am besten geeignet, wenn keine Nachbearbeitung der Daten erforderlich ist und Sie keinen Zugriff auf die Rohdaten gewähren möchten.
Die Ansicht ist im Schema LOCAL der freigegebenen SNOWFLAKE-Datenbank vorhanden:
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS
.Weitere Informationen dazu finden Sie in der Ansicht DATA_QUALITY_MONITORING_RESULTS.
Bemerkung
Die Datenbankrolle SNOWFLAKE.GOVERNANCE_VIEWER hat keinen Zugriff auf die Abfrage der Ansicht DATA_QUALITY_MONITORING_RESULTS.
- Option 3: Tabellenfunktion DATA_QUALITY_MONITORING_RESULTS aufrufen
Mit dieser Option können Sie die Tabellenfunktion DATA_QUALITY_MONITORING_RESULTS aufrufen, um die Ergebnisse DMF-Ergebnisse anzuzeigen. Die Funktion gibt dieselben Spalten zurück wie die Ansicht DATA_QUALITY_MONITORING_RESULTS. Sie können jedoch nur eine einzige Tabelle angeben, wenn Sie die Funktion aufrufen. Diese Option eignet sich am besten, wenn Sie die Ergebnisse der Datenmetrikfunktion auf eine einzige Tabelle beschränken und keinen Zugriff auf die Messungen anderer Tabellen oder die Ereignistabelle ermöglichen möchten.
Zusätzlich zur Anwendungsrolle SNOWFLAKE.DATA_QUALITY_MONITORING_LOOKUP benötigt die Rolle, mit der Sie die Tabellenfunktion DATA_QUALITY_MONITORING_RESULTS aufrufen, die folgenden Berechtigungen:
OWNERSHIP oder SELECT auf die Tabelle.
OWNERSHIP oder USAGE auf der DMF.
DMF aus dem System löschen¶
Löschen Sie die DMF aus dem System:
DROP FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER, NUMBER, NUMBER
)
);
Einschränkungen¶
Weitere Informationen finden Sie im Abschnitt Einschränkungen der Datenqualität.