SQL ステートメントの実行¶
Snowflake CLI では、 snow sql コマンドを使用して、 SQL クエリ、アドホッククエリ、または SQL クエリを含むファイルを実行できます。
アドホッククエリを実行するには、次のようなコマンドを実行します。
snow sql -q "SELECT * FROM FOO"
SQL クエリを含むファイルを実行するには、次のようなコマンドを実行します。
snow sql -f my_query.sql
snow sql
コマンドは複数のステートメントを実行でき、その場合は複数の結果セットが返されます。たとえば、次のように実行します。
snow sql -q "select 'a', 'b'; select 'c', 'd';"
出力は次のようになります。
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"
実行されると、コマンドは <% 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"
この例では、次の SQL クエリが生成されます。
grant usage on database dev to eng_rl
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 %>"
この例では、snow sql
コマンドはプロジェクト定義ファイル内の変数定義を検索し、コマンドラインに表示させずに値を抽出します。 snowflake.yml
ファイルは、現在の作業ディレクトリか、:codenowrap: -p
オプションで指定された場所のいずれかにある必要があります。
これらの値をプロジェクト定義ファイルに保存する方法の詳細については、 SQL での変数を使用する をご参照ください。