Snowflakeクラス¶
SNOWFLAKE データベースには、Snowflakeが提供するクラスも含まれています。
概念¶
クラス は、オブジェクト指向プログラミングのクラスに似ており、インスタンスを作成するための青写真の役割を果たします。 インスタンス は、クラスから作成されるオブジェクトです。クラスとインスタンスは、Snowflakeではスキーマレベルのオブジェクトです。クラスは拡張可能なSnowflakeオブジェクト型、インスタンスはSnowflakeオブジェクトと考えることができます。
クラスは、ストアドプロシージャや関数を介してパブリック API を提供します。これらを総称して クラスメソッド と呼びます。クラスは、クラスメソッドに対する粒度の細かい権限を可能にする クラスロール も提供します。パブリック API に加えて、クラスにはオブジェクト指向プログラミングにおけるプライベートなプロパティやメソッドに似た、プライベートな状態やプライベートプロシージャおよび関数が含まれます。クラスの実装は、新しい クラスのバージョン を介して、時間の経過とともに進化する可能性があります。インスタンスは、Snowflakeによって自動的に最新のクラスバージョンにアップグレードされます。
たとえば、Snowflakeは、 SNOWFLAKE.ML スキーマで ANOMALY_DETECTION クラス を提供します。特定のオブジェクト型のオブジェクトを作成するのと同じように、 CREATE コマンドを使用してクラスのインスタンスを作成できます。
以下の例は、クラスのインスタンスを作成し、インスタンスメソッドを呼び出します。
検索パスを更新 して、
SNOWFLAKE.MLを含めます。ANOMALY_DETECTION クラスのインスタンスを作成します。
ANOMALY_DETECTION クラスのインスタンス作成後に、インスタンスメソッドを呼び出すことができます。
注釈
現在、クラスはSnowflakeによってのみ提供され、ユーザーが作成することはできません。
利用可能なクラスをリストする¶
SHOW コマンドを使用して、利用可能なクラスを検索したり、各クラスの詳細を確認したりすることができます。これらのコマンドを使用すると、次を実行できます。
すべてのクラスを検索する¶
SHOW CLASSES コマンドを実行して、利用可能なすべてのSnowflakeクラスをリストします。
このステートメントの結果には、各クラスのデータベース名とスキーマ名が含まれます。
検索パスを更新する¶
クラスは、 SNOWFLAKE データベースのスキーマにあるオブジェクトです。このトピックに続く SQL コマンドを実行するには、完全修飾クラス名(例 :SNOWFLAKE.ML.ANOMALY_DETECTION)を使用する必要があります。あるいは、 検索パス を更新して、クラスのデータベースとスキーマを含めてから、そのクラスを非修飾名(例: ANOMALY_DETECTION)で参照することもできます。
注釈
特定のクラスの検索パスを更新すると、同じ名前ではあっても別のクラスの一部である関数にはアクセスできなくなります。たとえば、 SNOWFLAKE.CORTEX を検索パスに追加すると、 SNOWFLAKE.CORTEX.TRANSLATE 関数が存在するため、文字列関数 TRANSLATE にはアクセスできなくなります。
ALTER SESSION、 ALTER USER、または ALTER ACCOUNT を使用して検索パスを変更できます。
コマンド |
メモ |
|---|---|
現在のセッションのみの検索パスを変更します。自分の検索パスはセッションレベルで変更できます。セッションレベルでの変更は、アカウントレベルまたはユーザーレベルでの設定を上書きします。 |
|
現在のユーザーまたは指定されたユーザーの検索パスを永続的に変更します。自分の検索パスはユーザーレベルで変更できます。管理者は、他のユーザーの検索パスを変更することができます。ユーザーレベルでの変更は、アカウントレベルまたはセッションレベルでの設定を上書きします。 |
|
アカウント内のすべてのユーザーに対して検索パスを永続的に変更します。管理者は、アカウントレベルで検索パスを変更する必要があります。 |
以下のステートメントを実行し、
value列から現在の検索パスをコピーします。自分の検索パスを更新します。
注釈
以下の例では、デフォルトの検索パス、
$current, $publicを使用しています。前のステップのvalue列で検索パスがデフォルト値と一致しない場合は、以下のステートメント例を編集して、実際の検索パスを含めます。たとえば、現在のセッション用に SNOWFLAKE.ML を検索パスに追加するには、次のステートメントを実行します。
SNOWFLAKE.ML をユーザーレベルで自分の検索パスに追加するには、以下のステートメントを実行します。
ACCOUNTADMIN ロールを持つユーザーは、以下のステートメントを実行すると、アカウントの検索パスを更新できます。
Snowflakeが名前を解決する方法の詳細については、 オブジェクト名の解決 をご参照ください。
クラスメソッド¶
クラスは、ストアドプロシージャや関数を介してパブリック API を提供します。これらを総称してクラス メソッド と呼びます。各メソッドに必要な引数など、クラスのすべてのメソッドをリストするには、 SHOW FUNCTIONS IN CLASS と SHOW PROCEDURES IN CLASS コマンドを実行します。クラスには、同じ名前で署名が異なる(つまり、引数の数や引数のデータ型が異なる)複数のメソッドが含まれている場合があります。
注釈
このトピックのステートメント例では、非修飾クラス名 ANOMALY_DETECTION を使用しています。SNOWFLAKE.ML を含めるように 検索パスを更新 していない場合は、 SNOWFLAKE.ML.ANOMALY_DETECTION クラスの完全修飾名を使用します。
たとえば、 SNOWFLAKE.ML.ANOMALY_DETECTION クラスで利用可能な関数をすべてリストするには、以下のステートメントを実行します。
SNOWFLAKE.ML.ANOMALY_DETECTION クラスのすべてのストアドプロシージャをリストするには、以下のステートメントを実行します。
以下の結果には、セッションの現在のロールにアクセス権限が付与されているクラス内のストアドプロシージャが含まれます。
クラスロール¶
クラスには、一部またはすべてのクラスメソッドに対して USAGE 権限を付与されたロールが1つ以上ある場合があります。 SHOW ROLES IN CLASS コマンドを使用すると、クラスで使用可能なロールをリストできます。
SNOWFLAKE.ML.ANOMALY_DETECTION クラスのすべてのロールをリストします。
インスタンスロール¶
ロールはクラスで定義され、インスタンスで インスタンスロール としてインスタンス化されます。アカウント内のロールにインスタンスロールを付与すると、インスタンスメソッドにアクセスできるようになります。
たとえば、スキーマ my_db.my_schema に ANOMALY_DETECTION インスタンス my_anomaly_detector がある場合、以下のステートメントを使用してインスタンスロール USER に付与された権限を表示することができます。
アカウントのロール 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 インスタンスを作成できるようにするには、以下のステートメントを実行します。
インスタンスを作成する¶
CREATE <オブジェクト> コマンドとクラスコンストラクターメソッドを使用して、クラスのインスタンスを作成できます。
注釈
スキーマ内のインスタンス名は、作成元のクラスに関係なく一意でなければなりません。たとえば、 foo という BUDGET (SNOWFLAKE.CORE) クラスのインスタンスがある場合、同じスキーマ内に foo という ANOMALY_DETECTION (SNOWFLAKE.ML) クラスのインスタンスを作成することはできません。
たとえば、異常検出 my_anomaly_detector インスタンスを作成するには、以下のステートメントを実行します。
インスタンスを使用する¶
クラスのインスタンス作成後に、そのクラスがプロバイダーとして提供するインスタンスメソッドを呼び出すことができます。メソッドを呼び出すには、感嘆符(!)文字が必要です。インスタンスの逆参照には ! 文字が使われます。
たとえば、異常検出 my_anomaly_detector の DETECT_ANOMALIES メソッドを呼び出すには、以下のステートメントを実行します。
表形式データを返す SQL クラスインスタンスメソッドからの列の選択¶
表形式のデータを返すメソッドもあります(例: ANOMALY_DETECTION や FORECAST クラスのメソッドなど)。この表データを選択して操作するには、 SELECT ステートメントの FROM 句でこれらのメソッドを呼び出します。
メソッドを呼び出すときは、 CALL コマンドを省略します。代わりに、 TABLE キーワードを前に付けて、呼び出しを括弧で囲みます。
たとえば、異常検出機能 my_anomaly_detector の DETECT_ANOMALIES メソッドによって返された表データから ts、 forecast、 is_anomaly 列を選択するには、
参照内でクエリに渡すと、そのクエリは参照外で定義された 共通テーブル式 を参照することはできません。たとえば、以下のステートメントを実行すると、クエリ参照が my_data を参照しているため、エラーになります。これは、外側の WITH 句で定義されています。
この制限を回避するには、 WITH 句をクエリ参照内に移動します。
利用可能なクラス¶
使用可能なSnowflakeクラスのリストについては、 SQL クラス参照 をご参照ください。
制限事項¶
複製 は、 CUSTOM_CLASSIFIER クラスのインスタンスに対してのみサポートされます。