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>)
Copy

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
);
Copy

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
$$;
Copy

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

DMF sichern

Eine DMF zu einer sicheren DMF machen:

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

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;
Copy

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';
Copy

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:

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';
Copy

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';
Copy

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';
Copy

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';
Copy

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';
Copy

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

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);
    
    Copy
  • 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);
    
    Copy

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'
    )
  );
Copy

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'
    )
  );
Copy

DMF manuell aufrufen

Verwenden Sie die folgende Syntax, um eine DMF aufzurufen:

SELECT <data_metric_function>(<query>)
Copy

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
  );
Copy

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:

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;
Copy

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 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
  )
);
Copy

Einschränkungen

Weitere Informationen finden Sie im Abschnitt Einschränkungen der Datenqualität.