❄️

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