SQL ステートメントの実行

Snowflake CLI では、 snow sql コマンドを使用して、 SQL クエリ、アドホッククエリ、または SQL クエリを含むファイルを実行できます。

アドホッククエリを実行するには、次のようなコマンドを実行します。

snow sql -q "SELECT * FROM FOO"
Copy

SQL クエリを含むファイルを実行するには、次のようなコマンドを実行します。

snow sql -f my_query.sql
Copy

snow sql コマンドは複数のステートメントを実行でき、その場合は複数の結果セットが返されます。たとえば、次のように実行します。

snow sql  -q "select 'a', 'b'; select 'c', 'd';"
Copy

出力は次のようになります。

select 'a', 'b';
+-----------+
| 'A' | 'B' |
|-----+-----|
| a   | b   |
+-----------+

select 'c', 'd';
+-----------+
| 'C' | 'D' |
|-----+-----|
| c   | d   |
+-----------+

詳細については、 snow sql コマンドをご参照ください。

SQL テンプレートの変数の使用

状況によっては、コンテキストに応じて SQL クエリを変更する必要がある場合があります。snow sql コマンドはクライアント側の変数置換をサポートしており、クエリを送信する前にローカルで解決されるコマンド内の変数を使用できます。SQL 文字列内の変数は <% variable_name %> の形式をとり、 -D (または --variable) オプションで変数の値を指定します。

注釈

現在、テンプレートには SnowSQL &variable_name<% variable_name %> 構文を使用できます。ただし、Snowflakeでは <% variable_name %> 構文の使用を推奨しています。

たとえば、クライアント側の変数を使用してデータベースを指定するには、次のようなコマンドを入力します。

snow sql -q "select * from <% database %>.logs" -D "database=dev"
Copy

実行されると、コマンドは <% database %> 変数の値を dev に置き換えて dev.logs ファイル名を作成し、select * from dev.logs SQL クエリをSnowflakeに送信して処理します。

次に示すように、複数の変数入力を指定することもできます。

snow sql \
-q "grant usage on database <% database %> to <% role %>" \
-D "database=dev" \
-D "role=eng_rl"
Copy

この例では、次の SQL クエリが生成されます。

grant usage on database dev to eng_rl
Copy

snowflake.yml プロジェクト定義ファイルに変数を保存する

snow sql コマンドラインオプションとして変数を指定することが必ずしも実用的ではなく、またコマンドラインで機密性の高い値を指定したくない場合もあります。このような場合は、 snowflake.yml プロジェクト定義ファイルで変数と値を定義できます。その場合、 -D "<variable> = <value>" オプションを使用する代わりに、 <% ctx.env.<variable_name> %> の形式で変数名を指定します。

前のセクションの例を使用して、データベースとロールの変数を snowflake.yml ファイルに保存し、クエリを次のように変更できます。

snow sql -q "grant usage on database <% ctx.env.database %> to <% ctx.env.role %>"
Copy

この例では、snow sql コマンドはプロジェクト定義ファイル内の変数定義を検索し、コマンドラインに表示させずに値を抽出します。 snowflake.yml ファイルは、現在の作業ディレクトリか、:codenowrap: -p オプションで指定された場所のいずれかにある必要があります。

これらの値をプロジェクト定義ファイルに保存する方法の詳細については、 SQL での変数を使用する をご参照ください。