Snowflakeスクリプト UDFs¶
Snowflakeは、Snowflakeスクリプトプロシージャ言語を含む SQL ユーザー定義関数(UDFs)をサポートしています。これらの UDFs は Snowflakeスクリプト UDFs と呼ばれます。
Snowflakeスクリプト UDFs は、SELECT ステートメントや INSERT ステートメントなどの SQL ステートメントで呼び出すことができます。したがって、これらは、SQL CALL コマンドでしか呼び出せないSnowflakeスクリプトストアドプロシージャよりも柔軟性があります。
一般的な使用法¶
Snowflakeスクリプト UDF は手続き型コードを評価し、スカラー(つまり単一)値を返します。
Snowflakeスクリプト UDFs では、次の Snowflakeスクリプト 構文のサブセットを使用できます。
サポートされているデータ型¶
Snowflakeスクリプト UDFs は、入力引数と戻り値の両方で次のデータ型をサポートします。
数値データ型 (例えば、INTEGER、 NUMBER、 FLOAT)
文字列およびバイナリデータ型 (例えば、 VARCHAR や BINARY)
日付と時刻のデータ型 (例えば、 DATE、 TIME、 TIMESTAMP)。
論理データ型 (例えば、 BOOLEAN)
Snowflakeスクリプト UDFs は、入力引数に対してのみ次のデータ型をサポートします。
制限事項¶
Snowflakeスクリプト UDFs には次の制限が適用されます。
次のタイプのSnowflakeスクリプト構文は、Snowflakeスクリプト UDFs ではサポートされていません。
SQL ステートメントは、Snowflakeスクリプト UDFs ではサポートされていません(SELECT、 INSERT、 UPDATE など)。
Snowflakeスクリプト UDFs はテーブル関数として定義できません。
次の式型はSnowflakeスクリプト UDFs ではサポートされていません。
ユーザー定義関数
集計関数
ウィンドウ関数
Snowflakeスクリプト UDFs は、マテリアライズドビューを作成する場合には使用できません。
Snowflakeスクリプト UDFs は、行アクセスポリシーおよびマスキングポリシーを作成する場合には使用できません。
Snowflakeスクリプト UDFs は、デフォルトの列値を指定するためには使用できません。
Snowflakeスクリプト UDFs は、データのロードおよびアンロード用の COPY INTO コマンドでは使用できません。
Snowflakeスクリプト UDFs はメモ化できません。
Snowflakeスクリプト UDFs には、入力引数に500個の制限があります。
Snowflakeスクリプト UDFs については メッセージをロギング できません。
例¶
次の例では、Snowflakeスクリプト UDFs を作成して呼び出します。
変数を使用したSnowflakeスクリプト UDF の作成¶
2つの引数の値に基づいて利益を計算するSnowflakeスクリプト UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
クエリで calculate_profit を呼び出します。
同じSnowflakeスクリプト UDF を使用して引数の列を指定できます。まず、テーブルを作成してデータを挿入します。
クエリで calculate_profit を呼び出し、引数の列を指定します。
条件付きロジックを使用したSnowflakeスクリプト UDF の作成¶
条件付きロジックを使用して、入力する INTEGER 値に基づき部門名を決定するSnowflakeスクリプト UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
クエリで check_dept を呼び出します。
Snowflakeスクリプト UDF を呼び出すときに、引数で SQL 変数 を使用できます。次の例では SQL 変数を設定してから、check_dept UDF への呼び出しにその変数を使います。
ループを使用したSnowflakeスクリプト UDF の作成¶
ループを使用して、引数で指定されたターゲット値までのすべての数値をカウントし、カウントされたすべての数値の合計を計算するSnowflakeスクリプト UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
クエリで count_to を呼び出します。
例外処理を使用したSnowflakeスクリプト UDF の作成¶
例外を宣言してから例外を発生させるSnowflakeスクリプト UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
クエリで raise_exception を呼び出し、入力値に 1 を指定します。
クエリで raise_exception を呼び出し、入力値に 2 を指定します。
クエリで raise_exception を呼び出し、入力値に NULL を指定します。
INSERT ステートメントの値を返すSnowflakeスクリプト UDF の作成¶
INSERT ステートメントで使用される値を返すSnowflakeスクリプト UDF を作成します。値が挿入されるテーブルを作成します。
数値を返す SQL UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
複数の INSERT ステートメントで value_to_insert を呼び出します。
テーブルをクエリして、挿入された値を表示します。
WHERE および ORDER BY 句で呼び出されるSnowflakeスクリプト UDF の作成¶
WHERE または ORDER BY 句で使用される値を返すSnowflakeスクリプト UDF を作成します。テーブルを作成して値を挿入します。
2つの入力値の乗算の積である数値を返す SQL UDF を作成します。
注釈
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
クエリの WHERE 句に get_product を呼び出し、積が 350 より大きい行を返すようにします。
クエリの ORDER BY 句に get_product を呼び出し、UDF で返される結果を小さい積から大きい積の順に並べ替えます。