snow sql¶
Snowflake クエリを実行します。 クエリ、ファイル名、インプットオプションのいずれかを使用します。 実行するクエリは、クエリオプション、ファイル名オプション(ファイルからのすべてのクエリが実行されます)、または他のコマンドからの出力をパイプしてstdin経由で指定できます。例: cat my.sql | snow sql -i。 このコマンドは、クライアント側で行われる変数の置換をサポートします。
構文¶
引数¶
なし
オプション¶
--query, -q TEXT実行するクエリ。
--filename, -f FILE実行するファイル。デフォルト: []
--stdin, -i標準入力からクエリを読み取ります。このコマンドに入力をパイプするときに使用します。デフォルト: false。
--variable, -D TEXTkey=value形式の文字列。提供された場合、 SQL コンテンツはテンプレートとして扱われ、提供されたデータを使用してレンダリングされます。
--retain-commentsSnowflakeに渡されたクエリのコメントを保持します。デフォルト: false。
--single-transaction / --no-single-transaction自動コミットを無効にして接続します。ステートメントを BEGIN/COMMIT で囲んで単一のトランザクションとして実行し、すべてのコマンドを正常に完了するか、変更が適用されないようにします。デフォルト: false。
--enable-templating [LEGACY|STANDARD| JINJA|ALL| NONE]Snowflakeにクエリを渡す前に変数を解決するために使用される構文。デフォルト: [<_EnabledTemplating.LEGACY: 'LEGACY'>, <_EnabledTemplating.STANDARD: 'STANDARD'>]。
-p, --project TEXTSnowflakeプロジェクトが保存されているパス。デフォルトは現在の作業ディレクトリです。
--env TEXTkey=value の形式の文字列。テンプレートに使用されたenvセクションの変数を上書きします。デフォルト: []
--connection, -c, --environment TEXTconfig.tomlファイルで定義されている接続の名前。デフォルト:デフォルト--host TEXT接続用のホストアドレス。接続に指定された値を上書きします。
--port INTEGER接続のポート。接続に指定された値を上書きします。
--account, --accountname TEXTSnowflakeアカウントに割り当てられた名前。接続に指定された値を上書きします。
--user, --username TEXTSnowflakeに接続するユーザー名。接続に指定された値を上書きします。
--password TEXTSnowflakeのパスワード。接続に指定された値を上書きします。
--authenticator TEXTSnowflakeの認証コード。接続に指定された値を上書きします。
--workload-identity-provider TEXTワークロードIDプロバイダー(AWS、AZURE、GCP、OIDC)。接続に指定された値を上書きします。
--private-key-file, --private-key-path TEXTSnowflake プライベートキーファイルへのパス。接続に指定された値を上書きします。
--token TEXTSnowflake接続時に使用する OAuth トークン。
--token-file-path TEXTSnowflake接続時に使用する OAuth トークンを含むファイルへのパス。
--database, --dbname TEXT使用するデータベース。接続に指定された値を上書きします。
--schema, --schemaname TEXT使用するデータベーススキーマ。接続に指定された値を上書きします。
--role, --rolename TEXT使用するロール。接続に指定された値を上書きします。
--warehouse TEXT使用するウェアハウス名。接続に指定された値を上書きします。
--temporary-connection, -xUses a connection defined with command-line parameters, instead of one defined in config. Default: False.
--mfa-passcode TEXT多要素認証(MFA)に使用するトークン。
--enable-diag接続診断レポートを作成するかどうか。デフォルト: false。
--diag-log-path TEXT生成されたレポートのパス。デフォルトはシステム仮ディレクトリです。デフォルト: <system_temporary_directory>.
--diag-allowlist-path TEXTallowlist パラメーターを含む JSON ファイルへのパス。
--oauth-client-id TEXTSnowflake統合のためにIDプロバイダーが提供するクライアントIDの値。
--oauth-client-secret TEXTSnowflake 統合用に ID プロバイダーが提供するクライアントシークレットの値。
--oauth-authorization-url TEXT認証コードをドライバーに提供する ID プロバイダーエンドポイント。
--oauth-token-request-url TEXTドライバーにアクセストークンを供給する ID プロバイダーのエンドポイント。
--oauth-redirect-uri TEXTURI 認証コードのリダイレクトに使用します。
--oauth-scope TEXTID プロバイダー承認リクエストで要求された範囲。
--oauth-disable-pkceコード交換の証明キー (PKCE) を無効にします。デフォルト:
False。--oauth-enable-refresh-tokens実際のアクセストークンが古くなった場合に、サイレント再認証コードを有効にします。デフォルト:
False。--oauth-enable-single-use-refresh-tokensシングルユース・更新・トークンのセマンティクスにオプトインするかどうか。デフォルト:
False。--client-store-temporary-credential仮認証情報を保存します。
--format [TABLE|JSON| JSON_EXT|CSV]出力形式を指定します。デフォルト: TABLE
--verbose, -vログレベル
info以上のログエントリを表示します。デフォルト: false。--debugログレベル
debug以上のログ エントリを表示します。デバッグログには追加情報が含まれます。デフォルト: false。--silentコンソールへの中間出力をオフにします。デフォルト: false。
--enhanced-exit-codes終了エラーコードをエラーのタイプによって区別します。デフォルト: false。
--decimal-precision INTEGERNumber of decimal places to display for decimal values. Uses Python's default precision if not specified. [env var: SNOWFLAKE_DECIMAL_PRECISION].
--helpこのコマンドのヘルプテキストを表示します。
使用上の注意¶
実行するSQLクエリを、次のオプションのいずれかを使用して指定できます。
--queryオプションを使用してクエリ文字列を指定します。SQL クエリを含む1つ以上のファイルを実行するには、
--filenameオプションを使用します。例:snow sql -f myfile.sqlsnow sql -f file1.sql -f file2.sql
クエリを
stdinとして指定し、snow sqlコマンドにパイプします。例えばcat my.sql | snow sqlです。SYSTEM 関数 のドル記号など、クエリにシェルに解釈させたくない特殊文字が含まれている場合は、次のいずれかを実行できます。
次のように、クエリを二重引用符ではなく一重引用符で囲みます。
snow sql -q 'SELECT SYSTEM$CLIENT_VERSION_INFO()'次のように特殊文字をエスケープします。
snow sql -q "SELECT SYSTEM\$CLIENT_VERSION_INFO()"
SQL クエリをテンプレート化するために、 SQL クエリの
<% variable_name %>プレースホルダーと-Dコマンドラインオプションを組み合わせた変数を次の形式で使用します。注釈
現在、テンプレートには SnowSQL
&variable_nameと<% variable_name %>の構文を使うことができます。ただし、Snowflakeでは<% variable_name %>構文の使用を推奨しています。クエリでスクリプトブロックを指定します。例:
注釈
スクリプトブロックを Snowflake CLI コマンドラインで直接指定する場合、シェルによっては
$$という区切り文字が別のものとして解釈されるため、動作しないことがあります。たとえば、bashシェルやzshシェルは、これをプロセス ID (PID)として解釈します。この制限に対処するために、次のような選択肢を使うことができます。それでもコマンドラインでスクリプトブロックを指定する場合は、
$$区切り文字をエスケープして、\$\$のようにすることができます。デフォルトの
$$区切り文字のスクリプトブロックを別のファイルに置き、snow sql -f <filename>コマンドで呼び出すこともできます。
JSON出力のフォーマット¶
:codenowrap:`--format`オプションには、JSONを表示する方法が2つあります。
JSON:次のように、引用符で囲まれた文字列としてJSONを返す。JSON_EXT:次のように、JSONオブジェクトとしてJSONを返す。
エラーコードの強化¶
--enhanced-exit-codes オプションは、クエリの実行結果による問題か、無効なコマンド・オプションによる問題かを識別するのに役立つ情報を提供します。このオプションを指定すると、 snow sql コマンドは以下のリターンコードを提供します。
0: 実行成功2: コマンドパラメーターの問題5: クエリ実行の問題1: その他のタイプ
コマンド実行後、 echo $? シェルコマンドでリターンコードを確認できます。
この例では、コマンドはクエリパラメーター(-q 'select 1')とクエリファイルパラメーター(-f my.query)の両方を含んでおり、これは無効なパラメーターの組み合わせです。
次の例は、コマンドに無効なクエリ(slectのスペルが間違っている)が含まれている場合の --enhanced-exit-codes オプションの効果を示しています。
--enhanced-exit-codesオプションを付けると、コマンドはクエリエラーを示す5終了コードを返します。--enhanced-exit-codesオプションを指定しないと、コマンドは一般的な(その他の)エラーを示す1終了コードを返します。
あるいは、 SNOWFLAKE_ENHANCED_EXIT_CODES 環境変数を 1 に設定して、すべての snow sql コマンドの拡張リターンコードを送信することもできます。
インタラクティブモード¶
snow sql コマンドは、 SQL コマンドを一度に入力できるインタラクティブモードをサポートしています。インタラクティブモードには以下の機能があります。
構文の強調表示
タイプ中のコード補完
検索可能な履歴
コマンド履歴を検索するには、CTRL-R を押します。
マルチライン入力
セミコロンで終わっていない行(
;)で ENTER を押すと、ステートメントがセミコロンで終わるまで、カーソルは次の行に移動してコマンドを続けます。
インタラクティブモードを使用するには、以下のように、 snow sql コマンドに続いて、 ENTER を入力します。
このコマンドは、 > プロンプトのあるサブシェルを開き、 SQL コマンドを対話的に入力できます。
以下のように、 SQL コマンドを入力します。
注釈
各 SQL ステートメントをセミコロン(;)で終わらせる必要があります。
インタラクティブモードを終了するには、 exit、 quit、または CTRL-D と入力します。
1トランザクションで複数のコマンドを実行可能¶
--single-transaction オプションを使用すると、複数の SQL コマンドを入力し、オールオアナッシングのコマンドセットとして実行することができます。コマンドを単一のトランザクションで実行することで、変更をコミットする前にすべてのコマンドが正常に完了することを確認できます。コマンドのどれかが失敗した場合、成功したコマンドからの変更はどれも持続しません。
以下の例は、成功したトランザクションと失敗したトランザクションを示しています。
コマンド実行成功
その後、コマンドがデータベースにコミットされたことを確認できます。
単一トランザクションの失敗
その後、コマンドがデータベースにコミットされていないことを確認できます。
例¶
以下の例では、 SQL SYSTEM$CLIENT_VERSION_INFO システム関数を使用して、クライアントとドライバーのバージョン情報を返します。
次の例は、クライアント側の変数を使用してデータベースを指定する方法を示しています。
実行されると、コマンドは
<% database %>変数の値をdevに置き換えてdev.logs識別子を作成し、select * from dev.logsSQL クエリをSnowflakeに送信して処理します。注釈
現在、テンプレートには SnowSQL
&variable_name構文を使用できます。ただし、Snowflakeでは<% variable_name %>構文の使用を推奨しています。この例では、
--envオプションを使って環境変数を渡す方法を示しています。デフォルトでは、 Snowflake CLI は SQL クエリのコメントを出力から削除します。以下の例では、クエリ結果にコメントを含めるために
--retain-commentsオプションを使用しています。example.sqlファイルに以下のステートメントとコメントが含まれていると仮定します。以下のコマンドを実行すると、クエリ結果に
--My commentが表示されます。