Snowflake CLI、 SnowSQL、 Classic Console、Python ConnectorでSnowflake Scriptingを使用する¶
このトピックでは、 Snowflake CLI、 SnowSQL、 Classic Console、および Python Connector でSnowflake Scriptingの例を実行する方法について説明します。
注釈
他のクライアントとインターフェイス(例: Snowsight または JDBC ドライバー)を使用している場合は、このトピックをスキップして、 Snowflakeスクリプトのブロック をご参照ください。
概要¶
現在、以下のインターフェイスは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>
コマンドで呼び出すこともできます。