Snowflakeクラス¶
SNOWFLAKE データベースには、Snowflakeが提供するクラスも含まれています。
概念¶
クラス は、オブジェクト指向プログラミングのクラスに似ており、インスタンスを作成するための青写真の役割を果たします。 インスタンス は、クラスから作成されるオブジェクトです。クラスとインスタンスは、Snowflakeではスキーマレベルのオブジェクトです。クラスは拡張可能なSnowflakeオブジェクト型、インスタンスはSnowflakeオブジェクトと考えることができます。
クラスは、ストアドプロシージャや関数を介してパブリック API を提供します。これらを総称して クラスメソッド と呼びます。クラスは、クラスメソッドに対する粒度の細かい権限を可能にする クラスロール も提供します。パブリック API に加えて、クラスにはオブジェクト指向プログラミングにおけるプライベートなプロパティやメソッドに似た、プライベートな状態やプライベートプロシージャおよび関数が含まれます。クラスの実装は、新しい クラスのバージョン を介して、時間の経過とともに進化する可能性があります。インスタンスは、Snowflakeによって自動的に最新のクラスバージョンにアップグレードされます。
たとえば、Snowflakeは、 SNOWFLAKE.ML スキーマで ANOMALY_DETECTION クラス を提供します。特定のオブジェクト型のオブジェクトを作成するのと同じように、 CREATE コマンドを使用してクラスのインスタンスを作成できます。
以下の例は、クラスのインスタンスを作成し、インスタンスメソッドを呼び出します。
検索パスを更新 して、
SNOWFLAKE.ML
を含めます。ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
ANOMALY_DETECTION クラスのインスタンスを作成します。
CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
ANOMALY_DETECTION クラスのインスタンス作成後に、インスタンスメソッドを呼び出すことができます。
mydatabase.myschema.my_anomaly_detector!DETECT_ANOMALIES(...);
注釈
現在、クラスはSnowflakeによってのみ提供され、ユーザーが作成することはできません。
利用可能なクラスをリストする¶
SHOW コマンドを使用して、利用可能なクラスを検索したり、各クラスの詳細を確認したりすることができます。これらのコマンドを使用すると、次を実行できます。
すべてのクラスを検索する¶
SHOW CLASSES コマンドを実行して、利用可能なすべてのSnowflakeクラスをリストします。
SHOW CLASSES IN DATABASE SNOWFLAKE;
このステートメントの結果には、各クラスのデータベース名とスキーマ名が含まれます。
検索パスを更新する¶
クラスは、 SNOWFLAKE データベースのスキーマにあるオブジェクトです。このトピックに続く SQL コマンドを実行するには、完全修飾クラス名(例 :SNOWFLAKE.ML.ANOMALY_DETECTION)を使用する必要があります。あるいは、 検索パス を更新して、クラスのデータベースとスキーマを含めてから、そのクラスを非修飾名(例: ANOMALY_DETECTION)で参照することもできます。
ALTER SESSION、 ALTER USER、または ALTER ACCOUNT を使用して検索パスを変更できます。
コマンド |
メモ |
---|---|
現在のセッションのみの検索パスを変更します。自分の検索パスはセッションレベルで変更できます。セッションレベルでの変更は、アカウントレベルまたはユーザーレベルでの設定を上書きします。 |
|
現在のユーザーまたは指定されたユーザーの検索パスを永続的に変更します。自分の検索パスはユーザーレベルで変更できます。管理者は、他のユーザーの検索パスを変更することができます。ユーザーレベルでの変更は、アカウントレベルまたはセッションレベルでの設定を上書きします。 |
|
アカウント内のすべてのユーザーに対して検索パスを永続的に変更します。管理者は、アカウントレベルで検索パスを変更する必要があります。 |
以下のステートメントを実行し、
value
列から現在の検索パスをコピーします。SHOW PARAMETERS LIKE 'search_path';
自分の検索パスを更新します。
注釈
以下の例では、デフォルトの検索パス、
$current, $public
を使用しています。前のステップのvalue
列で検索パスがデフォルト値と一致しない場合は、以下のステートメント例を編集して、実際の検索パスを含めます。たとえば、現在のセッション用に SNOWFLAKE.ML を検索パスに追加するには、次のステートメントを実行します。
ALTER SESSION SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
SNOWFLAKE.ML をユーザーレベルで自分の検索パスに追加するには、以下のステートメントを実行します。
ALTER USER SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
ACCOUNTADMIN ロールを持つユーザーは、以下のステートメントを実行すると、アカウントの検索パスを更新できます。
ALTER ACCOUNT SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
Snowflakeが名前を解決する方法の詳細については、 オブジェクト名の解決 をご参照ください。
クラスメソッド¶
クラスは、ストアドプロシージャや関数を介してパブリック API を提供します。これらを総称してクラス メソッド と呼びます。各メソッドに必要な引数など、クラスのすべてのメソッドをリストするには、 SHOW FUNCTIONS IN CLASS と SHOW PROCEDURES IN CLASS コマンドを実行します。クラスには、同じ名前で署名が異なる(つまり、引数の数や引数のデータ型が異なる)複数のメソッドが含まれている場合があります。
注釈
このトピックのステートメント例では、非修飾クラス名 ANOMALY_DETECTION を使用しています。SNOWFLAKE.ML を含めるように 検索パスを更新 していない場合は、 SNOWFLAKE.ML.ANOMALY_DETECTION クラスの完全修飾名を使用します。
たとえば、 SNOWFLAKE.ML.ANOMALY_DETECTION クラスで利用可能な関数をすべてリストするには、以下のステートメントを実行します。
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 |
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
SNOWFLAKE.ML.ANOMALY_DETECTION クラスのすべてのストアドプロシージャをリストするには、以下のステートメントを実行します。
SHOW PROCEDURES IN CLASS ANOMALY_DETECTION;
以下の結果には、セッションの現在のロールにアクセス権限が付与されているクラス内のストアドプロシージャが含まれます。
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
| 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 |
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
クラスロール¶
クラスには、一部またはすべてのクラスメソッドに対して USAGE 権限を付与されたロールが1つ以上ある場合があります。 SHOW ROLES IN CLASS コマンドを使用すると、クラスで使用可能なロールをリストできます。
SNOWFLAKE.ML.ANOMALY_DETECTION クラスのすべてのロールをリストします。
SHOW ROLES IN CLASS ANOMALY_DETECTION;
+-------------------------------+------+---------+
| created_on | name | comment |
|-------------------------------+------+---------|
| 2023-06-06 01:06:42.808 +0000 | USER | NULL |
+-------------------------------+------+---------+
インスタンスロール¶
ロールはクラスで定義され、インスタンスで インスタンスロール としてインスタンス化されます。アカウント内のロールにインスタンスロールを付与すると、インスタンスメソッドにアクセスできるようになります。
たとえば、スキーマ my_db.my_schema
に ANOMALY_DETECTION インスタンス my_anomaly_detector
がある場合、以下のステートメントを使用してインスタンスロール USER に付与された権限を表示することができます。
SHOW GRANTS TO SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER;
アカウントのロール my_role
にインスタンスロールを付与するには、以下のステートメントを実行します。
GRANT SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER
TO ROLE my_role;
上記のステートメントにより、ロール my_role
は ANOMALY_DETECTOR インスタンス my_anomaly_detector
のメソッドを実行できるようになります。
注釈
ロール my_role
には、データベース my_db
とスキーマ my_schema
に対する USAGE 権限も必要です。ロール my_role
には、インスタンスメソッドに渡されるオブジェクトに対する適切な権限も必要です。
クラスインスタンスの作成権限の付与¶
クラスのインスタンスを作成するには、ロールに CREATE <クラス名> 権限が付与されている必要があります。
たとえば、 ml_admin
ロールが mydb.myschema
スキーマで SNOWFLAKE.ML.ANOMALY_DETECTION インスタンスを作成できるようにするには、以下のステートメントを実行します。
GRANT CREATE ANOMALY_DETECTION ON SCHEMA mydb.myschema TO ROLE ml_admin;
インスタンスを作成する¶
CREATE <オブジェクト> コマンドとクラスコンストラクターメソッドを使用して、クラスのインスタンスを作成できます。
注釈
スキーマ内のインスタンス名は、作成元のクラスに関係なく一意でなければなりません。たとえば、 foo
という BUDGET クラスのインスタンスがある場合、同じスキーマ内に foo
という ANOMALY_DETECTION クラスのインスタンスを作成することはできません。
たとえば、異常検出 my_anomaly_detector
インスタンスを作成するには、以下のステートメントを実行します。
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 => ''
);
インスタンスを使用する¶
クラスのインスタンス作成後に、そのクラスがプロバイダーとして提供するインスタンスメソッドを呼び出すことができます。メソッドを呼び出すには、感嘆符(!
)文字が必要です。インスタンスの逆参照には !
文字が使われます。
たとえば、異常検出 my_anomaly_detector
の DETECT_ANOMALIES メソッドを呼び出すには、以下のステートメントを実行します。
CALL my_anomaly_detector!DETECT_ANOMALIES(
INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_name>'),
TIMESTAMP_COLNAME =>'<timestamp_column_name>',
TARGET_COLNAME => '<target_column_name>'
);
利用可能なクラス¶
使用可能なSnowflakeクラスのリストについては、 SQL クラス参照 をご参照ください。
制限事項¶
クラスインスタンスの 複製 は現在サポートされていません。