Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector¶
This topic explains how to run the Snowflake Scripting examples in Snowflake CLI, SnowSQL, and the Python Connector.
注釈
If you are using other clients and interfaces, such as Snowflake CLI or the JDBC driver, you can skip this topic and refer to Snowflake Scripting blocks.
概要¶
現在、以下のインターフェイスはSnowflakeスクリプトのブロックを正しく解析しません。
Python Connector コードの
execute_stream()およびexecute_string()メソッド注釈
他のPython ConnectorメソッドはSnowflakeスクリプトのブロックを正しく解析します。
Snowflakeスクリプトのブロックを入力して実行すると、次のエラーが発生する可能性があります。
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
これらのインターフェイスを使用している場合にこの問題を回避するには、Snowflakeスクリプトのブロックの開始と終了を区切り文字で囲みます。
次のセクションでは、これを行う方法について説明します。
ストアドプロシージャのブロック周辺における文字列定数区切り文字の使用¶
ストアドプロシージャを作成する場合は、Snowflakeスクリプトのブロックを 一重引用符または二重ドル記号 で囲みます。例:
CREATE OR REPLACE PROCEDURE myprocedure()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
注釈
スクリプトブロックを Snowflake CLI コマンドラインで直接指定する場合、シェルによっては $$ という区切り文字が別のものとして解釈されるため、動作しないことがあります。たとえば、bashシェルやzshシェルは、これをプロセス ID (PID)として解釈します。この制限に対処するために、次のような選択肢を使うことができます。
それでもコマンドラインでスクリプトブロックを指定する場合は、
$$区切り文字をエスケープして、\$\$のようにすることができます。デフォルトの
$$区切り文字のスクリプトブロックを別のファイルに置き、snow sql -f <filename>コマンドで呼び出すこともできます。
ブロックを文字列リテラルとして EXECUTE IMMEDIATE に渡す¶
匿名ブロック を記述している場合は、ブロックを文字列リテラルとして EXECUTE IMMEDIATE コマンドに渡します。文字列リテラルを区切るには、 一重引用符または二重ドル記号 を使用します。
例:
EXECUTE IMMEDIATE $$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
別の方法として、ブロックを含む文字列リテラルである セッション変数 を定義し、そのセッション変数を EXECUTE IMMEDIATE コマンドに渡すことができます。例:
SET stmt =
$$
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
EXECUTE IMMEDIATE $stmt;
注釈
スクリプトブロックを Snowflake CLI コマンドラインで直接指定する場合、シェルによっては $$ という区切り文字が別のものとして解釈されるため、動作しないことがあります。たとえば、bashシェルやzshシェルは、これをプロセス ID (PID)として解釈します。この制限に対処するために、次のような選択肢を使うことができます。
それでもコマンドラインでスクリプトブロックを指定する場合は、
$$区切り文字をエスケープして、\$\$のようにすることができます。デフォルトの
$$区切り文字のスクリプトブロックを別のファイルに置き、snow sql -f <filename>コマンドで呼び出すこともできます。