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.
Aktualisieren des Suchpfads um
SNOWFLAKE.ML
einzuschließen:ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
Erstellen einer Instanz der Klasse ANOMALY_DETECTION:
CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
Nachdem Sie eine Instanz der Klasse ANOMALY_DETECTION erstellt haben, können Sie Instanzmethoden aufrufen:
mydatabase.myschema.my_anomaly_detector!DETECT_ANOMALIES(...);
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;
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 |
---|---|
Ä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. |
|
Ä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. |
|
Ändert den Suchpfad dauerhaft für alle Benutzer des Kontos. Ein Administrator muss den Suchpfad auf Kontoebene ändern. |
Führen Sie die folgende Anweisung aus, und kopieren Sie Ihren aktuellen Suchpfad aus der Spalte
value
:SHOW PARAMETERS LIKE 'search_path';
Aktualisieren Sie den Suchpfad.
Bemerkung
In den folgenden Beispielen wird der Standardsuchpfad
$current, $public
verwendet. Wenn Ihr Suchpfad in der Spaltevalue
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';
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';
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';
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;
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
| 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;
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;
+-------------------------------+------+---------+
| 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;
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;
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;
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 => ''
);
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>'
);
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.