❄️
snow コマンドで、ストアドプロシージャ作成SQLを実行すると、'予期しない「<EOF>」。'エラーが発生する
概要
Snowflake にて Snowflake スクリプトを定義したSQLを実行した際、 予期しない「<EOF>」。
というエラーに遭遇しました。
原因と解決方法についてメモを残します。
遭遇したエラーの詳細
snow コマンド(CLI)にて、 Snowflake スクリプトを使用した Snowflake のストアドプロシージャの作成を試みた際に遭遇。
Snowflake スクリプト上の ';'
箇所を指して、「予期しない「<EOF>」。
」というエラーメッセージが発生する。
なお、Snowflake のワークシート上で、同一のストアドプロシージャ作成 SQL を実行しても、エラーが再現しない。
エラーの原因
Snowflake スクリプト の開始と終了を示す、$$
という記号が存在する。
Snowflake ワークシート上では不要だが、 snow コマンド(CLI)、Python コネクター等で Snowflake スクリプトを定義する場合、 $$
記号が必要。
Snowflake コマンド(CLI)で Snowflake スクリプトを記述した際に $$
記号を省略したため、本エラーが発生した。
この点は公式ドキュメントにも記載されている。
対処方法
Snowflake スクリプトの開始と終了部分を $$
でくくる。
解決前 ('予期しない「<EOF>」。' が発生するSQL)
create or replace procedure()
...
LANGUAGE SQL -- Snowflake スクリプトを使用
...
AS
BEGIN
-- ここにSQL文
END;
解決後
create or replace procedure()
...
LANGUAGE SQL
...
AS
$$ -- Snowflake スクリプト開始
BEGIN
-- ここにSQL文
END;
$$; -- Snowflake スクリプト終了
所感
開発時は、「Snowflake ワークシートで開発 => CLI へ移植」という流れで進めていたために遭遇しました。
Snowflake ワークシート上でエラーが再現せず、困惑した記憶があります。
開発の流れを以下のどちらかへ変更することで、再発は防止できそうです。
- SQL の開発は snow コマンド(CLI) で行う
- Snowflake スクリプト開発時は、ワークシート上でも
$$
を記載する
Discussion