CREATE DATA METRIC FUNCTION

Erstellt eine neue Datenmetrikfunktion (DMF) im aktuellen oder angegebenen Schema oder ersetzt eine vorhandene Datenmetrikfunktion.

Wenden Sie nach dem Erstellen einer DMF diese mit dem Befehl ALTER TABLE … ALTER COLUMN auf eine Tabellenspalte oder mit dem Befehl ALTER VIEW auf eine Ansichtsspalte an.

Siehe auch:

Referenz zu DMF-Befehlen

Unter diesem Thema:

Syntax

CREATE [ OR REPLACE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
  ( <arg_name> TABLE( <c1> <data_type> [ , ... ] ) )
  RETURNS NUMBER [ [ NOT ] NULL ]
  [ LANGUAGE SQL ]
  [ COMMENT = '<string_literal>' ]
  AS
  '<expression>'
Copy

Erforderliche Parameter

name

Bezeichner für die DMF. Dieser muss für Ihr Schema eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

( arg_name TABLE( c1 data_type [ , ... ] ) )

Die Signatur der DMF, die als Eingabe für den Ausdruck verwendet wird.

Sie müssen Folgendes angegeben:

  • Nur einen Argumentnamen arg_name für die Tabelle.

  • Mindestens einen Spaltennamen und seinen Datentyp: c1 data_type.

    Sie können optional zusätzliche Spalten und deren Datentypen angeben. Die Spalten müssen sich in der gleichen Tabelle befinden und können nicht auf eine andere Tabelle verweisen.

RETURNS NUMBER

Datentyp der Ausgabe der Funktion.

Der Datentyp kann nur NUMBER sein.

AS expression

SQL-Ausdruck, der die Ausgabe der Funktion bestimmt. Der Ausdruck muss deterministisch sein und einen Skalarwert zurückgeben. Der Ausdruck kann auf andere Tabellenobjekte verweisen, z. B. durch Verwendung einer WITH-Klausel oder einer WHERE-Klausel.

Die Trennzeichen um expression können einfache Anführungszeichen oder doppelte Dollarzeichen sein. Die Verwendung von $$ als Trennzeichen vereinfacht das Schreiben von Funktionen, die einfache Anführungszeichen enthalten.

Wenn als Trennzeichen für expression das einfache Anführungszeichen verwendet wird, müssen alle Anführungszeichen innerhalb von expression (z. B. Zeichenfolgenliterale) mit einfachen Anführungszeichen als Escape-Zeichen versehen werden.

expression unterstützt Folgendes nicht:

  • Verwenden des JOIN-Konstrukts.

  • Verwenden nicht deterministischer Funktionen (z. B. CURRENT_TIME).

  • Verweisen auf ein Objekt, das von einem UDF oder UDTF abhängt.

  • Rückgabe einer nicht skalaren Ausgabe.

Optionale Parameter

LANGUAGE SQL

Gibt die Sprache an, in der Ausdruck geschrieben wurde.

SQL ist die einzige unterstützte Sprache.

COMMENT = 'string_literal'

Gibt einen Kommentar für die DMF an.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE DATA METRIC FUNCTION

Schema

Die Berechtigung ermöglicht nur die Erstellung von Datenmetrikfunktionen im Schema.

Wenn Sie die Erstellung von benutzerdefinierten Funktionen wie SQL oder Java-UDFs ermöglichen möchten, muss die Rolle über die Berechtigung CREATE FUNCTION verfügen.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Wenn Sie eine bestehende Datenmetrikfunktion aktualisieren möchten und dazu die aktuelle Definition der Richtlinie anzeigen müssen, führen Sie den Befehl DESCRIBE FUNCTION (DMF) aus. oder rufen Sie die Funktion GET_DDL auf.

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

Beispiel: Zählen von Nicht-NULL-Werten

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

Beispiel: Fremdschlüsselreferenz

Sie können eine Datenmetrikfunktion erstellen, die auf eine andere Tabelle verweist als die Tabelle, der Sie die DMF zuweisen. Sie könnten zum Beispiel eine DMF erstellen, um die Anzahl der Zeilen zu messen, die auf eine Fremdschlüsseleinschränkung zurückzuführen sind. Nehmen wir als repräsentatives Beispiel zwei Tabellen, salespeople und salesorders, die eine gemeinsame Spalte namens sp_id haben, die als Fremdschlüsseleinschränkung bezeichnet wird.

Erstellen Sie eine DMF, um die Anzahl der Zeilen zu ermitteln, die eine Fremdschlüsselreferenz enthalten. Die WHERE-Klausel spezifiziert die Spalte sp_id, die die Bezeichner der Verkäufer enthält, in der Tabelle salespeople:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.foreign_key_sales(
  arg_t TABLE (arg_c INT))
RETURNS NUMBER AS
'SELECT COUNT(*) FROM arg_t
   WHERE arg_c IN (SELECT sp_id FROM salespeople)';
Copy

Rufen Sie die DMF manuell auf, und geben Sie die Spalte sp_id der Tabelle salesorders an:

SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
Copy

Die Ausgabe gibt die Anzahl der Zeilen in der Tabelle salesorder zurück, bei denen der Wert in der Spalte sp_id das Ergebnis eines Wertes in der Spalte sp_id der Tabelle salespeople ist.