Snowflake-Klassen

Die Datenbank SNOWFLAKE enthält auch Klassen, die von Snowflake bereitgestellt werden.

Konzepte

Eine Klasse ist vergleichbar mit einer Klasse in der objektorientierten Programmierung und dient als Vorlage für das Erstellen von Instanzen. Eine Instanz ist ein Objekt, das aus einer Klasse erstellt wird. Klassen und Instanzen sind in Snowflake Objekte auf Schemaebene. Sie können sich eine Klasse als einen erweiterbaren Snowflake-Objekttyp vorstellen und eine Instanz als ein Snowflake-Objekt.

Eine Klasse bietet eine öffentliche API über gespeicherte Prozeduren und Funktionen. Zusammen werden sie als Klassenmethoden bezeichnet. Eine Klasse bietet auch Klassenrollen, die fein abgestufte Berechtigungen für Klassenmethoden ermöglichen. Neben der öffentlichen API enthält eine Klasse auch private Zustände und private Prozeduren und Funktionen, ähnlich wie private Eigenschaften und Methoden in der objektorientierten Programmierung. Die Implementierung einer Klasse kann sich im Laufe der Zeit durch neue Klassenversionen weiterentwickeln. Die Instanzen werden von Snowflake automatisch auf die neueste Klassenversion aktualisiert.

Snowflake bietet zum Beispiel die Klasse ANOMALY_DETECTION im Schema SNOWFLAKE.ML. Sie können eine Instanz einer Klasse mit dem Befehl CREATE genauso erstellen, wie Sie ein Objekt eines bestimmten Objekttyps erstellen würden.

Im folgenden Beispiel wird eine Instanz einer Klasse erstellt und eine Instanzmethode aufgerufen.

  1. Aktualisieren des Suchpfads um SNOWFLAKE.ML einzuschließen:

    ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
    
    Copy
  2. Erstellen einer Instanz der Klasse ANOMALY_DETECTION:

    CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
    
    Copy
  3. Nachdem Sie eine Instanz der Klasse ANOMALY_DETECTION erstellt haben, können Sie Instanzmethoden aufrufen:

    mydatabase.myschema.my_anomaly_detector!DETECT_ANOMALIES(...);
    
    Copy

Bemerkung

Derzeit werden die Klassen nur von Snowflake bereitgestellt und können nicht von Benutzern erstellt werden.

Auflisten der verfügbaren Klassen

Sie können verfügbare Klassen finden und mittels der SHOW-Befehle mehr über die einzelnen Klassen erfahren. Diese Befehle ermöglichen Folgendes:

Ermitteln aller Klassen

Listen Sie alle verfügbaren Snowflake-Klassen auf, indem Sie den Befehl SHOW CLASSES ausführen:

SHOW CLASSES IN DATABASE SNOWFLAKE;
Copy

Die Ergebnisse dieser Anweisung enthalten den Datenbank- und Schemanamen für jede Klasse.

Aktualisieren des Suchpfads

Klassen sind Objekte in einem Schema in der SNOWFLAKE-Datenbank. Sie müssen den vollqualifizierten Klassennamen verwenden (z. B. SNOWFLAKE.ML.ANOMALY_DETECTION), um die SQL-Befehle auszuführen, die weiter unten erörtert werden. Alternativ können Sie den Suchpfad aktualisieren, um die Datenbank und das Schema einer Klasse einzuschließen, und dann auf die Klasse mit ihrem nicht qualifizierten Namen verweisen (z. B. ANOMALY_DETECTION).

Sie können den Suchpfad mit ALTER SESSION, ALTER USER oder ALTER ACCOUNT ändern.

Befehl

Anmerkungen

ALTER SESSION

Ändert den Suchpfad nur für die aktuelle Sitzung. Sie können Ihren eigenen Suchpfad auf Sitzungsebene ändern. Eine Änderung auf Sitzungsebene überschreibt die Einstellung auf Konto- oder Benutzerebene.

ALTER USER

Ändert den Suchpfad dauerhaft für den aktuellen oder den angegebenen Benutzer. Sie können Ihren eigenen Suchpfad auf Benutzerebene ändern. Ein Administrator kann den Suchpfad eines anderen Benutzers ändern. Eine Änderung auf Benutzerebene überschreibt die Einstellung auf Konto- oder Sitzungsebene.

ALTER ACCOUNT

Ändert den Suchpfad dauerhaft für alle Benutzer des Kontos. Ein Administrator muss den Suchpfad auf Kontoebene ändern.

  1. Führen Sie die folgende Anweisung aus, und kopieren Sie Ihren aktuellen Suchpfad aus der Spalte value:

    SHOW PARAMETERS LIKE 'search_path';
    
    Copy
  2. Aktualisieren Sie den Suchpfad.

    Bemerkung

    In den folgenden Beispielen wird der Standardsuchpfad $current, $public verwendet. Wenn Ihr Suchpfad in der Spalte value aus dem vorherigen Schritt nicht mit dem Standardwert übereinstimmt, bearbeiten Sie die Beispielanweisungen unten, um Ihren tatsächlichen Suchpfad einzuschließen.

    Um zum Beispiel SNOWFLAKE.ML zum Suchpfad Ihrer aktuellen Sitzung hinzuzufügen, führen Sie folgende Anweisung aus:

    ALTER SESSION SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

    Um SNOWFLAKE.ML zu Ihrem eigenen Suchpfad auf Benutzerebene hinzuzufügen, führen Sie die folgende Anweisung aus:

    ALTER USER SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

    Ein Benutzer mit der Rolle ACCOUNTADMIN kann den Suchpfad für das Konto aktualisieren, indem die folgende Anweisung ausgeführt werden:

    ALTER ACCOUNT SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

Weitere Informationen dazu, wie Snowflake Namen auflöst, finden Sie unter Auflösung des Objektnamens.

Klassenmethoden

Eine Klasse bietet eine öffentliche API über gespeicherte Prozeduren und Funktionen. Zusammen werden sie als Klassenmethoden bezeichnet. Um alle Methoden einer Klasse aufzulisten, einschließlich der für jede Methode erforderlichen Argumente, führen Sie die Befehle SHOW FUNCTIONS IN CLASS bzw. SHOW PROCEDURES IN CLASS aus. Eine Klasse kann mehrere Methoden mit demselben Namen, aber unterschiedlichen Signaturen (d. h. mit einer unterschiedlichen Anzahl von Argumenten oder Argumentdatentypen) enthalten.

Bemerkung

Die Beispielanweisungen unter diesem Thema verwenden den nicht qualifizierten Klassennamen ANOMALY_DETECTION. Wenn Sie Ihren Suchpfad nicht aktualisiert haben, um SNOWFLAKE.ML einzuschließen, verwenden Sie den vollqualifizierten Namen für die Klasse SNOWFLAKE.ML.ANOMALY_DETECTION.

Um beispielsweise alle Funktionen aufzulisten, die in der Klasse SNOWFLAKE.ML.ANOMALY_DETECTION verfügbar sind, führen Sie die folgende Anweisung aus:

SHOW FUNCTIONS IN CLASS ANOMALY_DETECTION;
Copy
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
| name                  | min_num_arguments | max_num_arguments | arguments                                                                | descriptions | language |
|-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------|
| _DETECT_ANOMALIES_1_1 |                 5 |                 5 | (MODEL BINARY, TS TIMESTAMP_NTZ, Y FLOAT, FEATURES ARRAY, CONFIG OBJECT) | NULL         | Python   |
| _FIT                  |                 3 |                 3 | (TS TIMESTAMP_NTZ, Y FLOAT, FEATURES ARRAY)                              | NULL         | Python   |
| _FIT                  |                 4 |                 4 | (TS TIMESTAMP_NTZ, Y FLOAT, LABEL BOOLEAN, FEATURES ARRAY)               | NULL         | Python   |
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+

Um alle gespeicherten Prozeduren der Klasse SNOWFLAKE.ML.ANOMALY_DETECTION aufzulisten, führen Sie die folgende Anweisung aus:

SHOW PROCEDURES IN CLASS ANOMALY_DETECTION;
Copy

Die folgenden Ergebnisse enthalten die gespeicherten Prozeduren der Klasse, für die der aktuellen Rolle der Sitzung Zugriffsrechte gewährt wurden:

+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
| name                            | min_num_arguments | max_num_arguments | arguments                                                                                                                                | descriptions | language   |
|---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------|
| __CONSTRUCT                     |                 4 |                 4 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR)                                           | NULL         | Javascript |
| __CONSTRUCT                     |                 5 |                 5 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR)                   | NULL         | Javascript |
| DETECT_ANOMALIES                |                 4 |                 4 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR)                                          | NULL         | SQL        |
| DETECT_ANOMALIES                |                 5 |                 5 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, CONFIG_OBJECT OBJECT)                    | NULL         | SQL        |
| DETECT_ANOMALIES                |                 3 |                 3 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR)                                                                  | NULL         | SQL        |
| DETECT_ANOMALIES                |                 4 |                 4 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, CONFIG_OBJECT OBJECT)                                            | NULL         | SQL        |
| EXPLAIN_FEATURE_IMPORTANCE      |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _CONSTRUCTFEATUREINPUT          |                 6 |                 6 | (INPUT_REF VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR, REF_ALIAS VARCHAR) | NULL         | Javascript |
| _CONSTRUCTINFERENCEFUNCTIONNAME |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _CONSTRUCTINFERENCERESULTAPI    |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _SETTRAININGINFO                |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+

Klassenrollen

Eine Klasse kann eine oder mehrere Rollen haben, die über die USAGE-Berechtigung für einige oder alle Methoden der Klasse verfügen. Sie können die in einer Klasse verfügbaren Rollen mit dem Befehl SHOW ROLES IN CLASS auflisten.

Listen Sie alle Rollen in der Klasse SNOWFLAKE.ML.ANOMALY_DETECTION auf:

SHOW ROLES IN CLASS ANOMALY_DETECTION;
Copy
+-------------------------------+------+---------+
| created_on                    | name | comment |
|-------------------------------+------+---------|
| 2023-06-06 01:06:42.808 +0000 | USER | NULL    |
+-------------------------------+------+---------+

Instanzrollen

Rollen werden in der Klasse definiert und in der Instanz als Instanzrolle instanziiert. Eine Instanzrolle kann einer Rolle in Ihrem Konto gewährt werden, um den Zugriff auf Instanzmethoden zu ermöglichen.

Wenn Sie z.B. eine ANOMALY_DETECTION Instanz my_anomaly_detector im Schema my_db.my_schema haben, können Sie die Berechtigungen, die der Instanzrolle USER gewährt wurden, mit der folgenden Anweisung anzeigen:

SHOW GRANTS TO SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER;
Copy

Um die Instanzrolle der Rolle my_role in Ihrem Konto zu gewähren, führen Sie die folgende Anweisung aus:

GRANT SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER
  TO ROLE my_role;
Copy

Die obige Anweisung ermöglicht es der Rolle my_role, Methoden der Instanz ANOMALY_DETECTOR my_anomaly_detector auszuführen.

Bemerkung

Die Rolle my_role muss außerdem über die Berechtigung USAGE für die Datenbank my_db und das Schema my_schema verfügen. Die Rolle my_role muss auch über die entsprechenden Berechtigungen für Objekte verfügen, die an Instanzmethoden übergeben werden.

Erteilen der Berechtigung zum Erstellen von Klasseninstanzen

Um eine Instanz einer Klasse zu erstellen, muss einer Rolle die Berechtigung CREATE <class_name> erteilt werden.

Um beispielsweise der Rolle ml_admin das Erstellen von SNOWFLAKE.ML.ANOMALY_DETECTION-Instanzen im Schema mydb.myschema zu ermöglichen, führen Sie die folgende Anweisung aus:

GRANT CREATE ANOMALY_DETECTION ON SCHEMA mydb.myschema TO ROLE ml_admin;
Copy

Instanz erstellen

Sie können eine Instanz einer Klasse mit dem Befehl CREATE <object> und der Methode „class constructor“ erstellen.

Bemerkung

Instanznamen in einem Schema müssen eindeutig sein, unabhängig von der Klasse, aus der sie erstellt wurden. Wenn Sie zum Beispiel eine Instanz der Klasse BUDGET mit dem Namen foo haben, können Sie keine Instanz der Klasse ANOMALY_DETECTION mit dem Namen foo im selben Schema erstellen.

Um beispielsweise eine Instanz der Anomalieerkennung my_anomaly_detector zu erstellen, führen Sie die folgende Anweisung aus:

CREATE ANOMALY_DETECTION <my_anomaly_detector_name>(
  INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_with_training_data>'),
  TIMESTAMP_COLUMN => '<timestamp_column_name>'
  TARGET_COLNAME => '<target_column_name>',
  LABEL_COLNAME => ''
);
Copy

Instanz verwenden

Nachdem Sie eine Instanz einer Klasse erstellt haben, können Sie die Instanzmethoden aufrufen, die die Klasse bereitstellt. Zum Aufrufen einer Methode ist ein Ausrufezeichen (!) erforderlich. Das Zeichen ! wird zur Dereferenzierung der Instanz verwendet.

Um beispielsweise die Methode DETECT_ANOMALIES der Anomalieerkennung my_anomaly_detector aufzurufen, führen Sie die folgende Anweisung aus:

CALL my_anomaly_detector!DETECT_ANOMALIES(
  INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_name>'),
  TIMESTAMP_COLNAME =>'<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>'
);
Copy

Verfügbare Klassen

Eine Liste der verfügbaren Snowflake-Klassen finden Sie unter SQL-Klassenreferenz.

Einschränkungen

Die Replikation von Klasseninstanzen wird derzeit nicht unterstützt.