snow sql¶
Snowflake 쿼리를 실행합니다. 쿼리, 파일 이름 또는 입력 옵션을 사용합니다. 실행할 쿼리는 쿼리 옵션, 파일 이름 옵션(파일에서 가져온 모든 쿼리가 실행됨)을 사용하거나 다른 명령의 출력을 파이프로 연결하여 stdin을 통해 지정할 수 있습니다. 예: cat my.sql | snow sql -i
. 이 명령은 클라이언트 측에서 발생하는 변수 대체를 지원합니다.
구문¶
snow sql
--query <query>
--filename <files>
--stdin
--variable <data_override>
--retain-comments
--single-transaction / --no-single-transaction
--project <project_definition>
--env <env_overrides>
--connection <connection>
--host <host>
--port <port>
--account <account>
--user <user>
--password <password>
--authenticator <authenticator>
--private-key-file <private_key_file>
--token-file-path <token_file_path>
--database <database>
--schema <schema>
--role <role>
--warehouse <warehouse>
--temporary-connection
--mfa-passcode <mfa_passcode>
--enable-diag
--diag-log-path <diag_log_path>
--diag-allowlist-path <diag_allowlist_path>
--oauth-client-id <oauth_client_id>
--oauth-client-secret <oauth_client_secret>
--oauth-authorization-url <oauth_authorization_url>
--oauth-token-request-url <oauth_token_request_url>
--oauth-redirect-uri <oauth_redirect_uri>
--oauth-scope <oauth_scope>
--oauth-disable-pkce
--oauth-enable-refresh-tokens
--oauth-enable-single-use-refresh-tokens
--client-store-temporary-credential
--format <format>
--verbose
--debug
--silent
--enhanced-exit-codes
인자¶
없음
선택 사항¶
--query, -q TEXT
실행할 쿼리입니다.
--filename, -f FILE
실행할 파일입니다. 기본값: [].
--stdin, -i
표준 입력에서 쿼리를 읽습니다. 이 명령으로 입력을 파이프할 때 사용합니다. 기본값: False.
--variable, -D TEXT
키=값 형식의 문자열. 제공된 경우 SQL 콘텐츠는 템플릿으로 취급되며 제공된 데이터를 사용하여 렌더링됩니다.
--retain-comments
Snowflake에 전달된 쿼리의 설명을 유지합니다. 기본값: False.
--single-transaction / --no-single-transaction
자동 커밋이 비활성화된 상태로 연결합니다. 문을 BEGIN/COMMIT으로 둘러싸 단일 트랜잭션으로 실행하여 모든 명령이 성공적으로 완료되거나 아무런 변경 사항도 적용되지 않도록 합니다. 기본값: False.
-p, --project TEXT
Snowflake 프로젝트가 저장된 경로입니다. 현재 작업 디렉터리로 기본 설정됩니다.
--env TEXT
키=값 형식의 문자열입니다. 템플릿에 사용되는 환경 섹션의 변수를 재정의합니다. 기본값: [].
--connection, -c, --environment TEXT
config.toml
파일에 정의된 연결의 이름입니다. 기본값:default
.--host TEXT
연결을 위한 호스트 주소입니다. 연결에 지정된 값을 재정의합니다.
--port INTEGER
연결의 포트입니다. 연결에 지정된 값을 재정의합니다.
--account, --accountname TEXT
Snowflake 계정에 할당된 이름입니다. 연결에 지정된 값을 재정의합니다.
--user, --username TEXT
Snowflake에 연결할 사용자 이름입니다. 연결에 지정된 값을 재정의합니다.
--password TEXT
Snowflake 비밀번호입니다. 연결에 지정된 값을 재정의합니다.
--authenticator TEXT
Snowflake 인증자입니다. 연결에 지정된 값을 재정의합니다.
--private-key-file, --private-key-path TEXT
Snowflake 개인 키 파일 경로입니다. 연결에 지정된 값을 재정의합니다.
--token-file-path TEXT
Snowflake에 연결할 때 사용할 OAuth 토큰이 포함된 파일 경로입니다.
--database, --dbname TEXT
사용할 데이터베이스입니다. 연결에 지정된 값을 재정의합니다.
--schema, --schemaname TEXT
사용할 데이터베이스 스키마입니다. 연결에 지정된 값을 재정의합니다.
--role, --rolename TEXT
사용할 역할입니다. 연결에 지정된 값을 재정의합니다.
--warehouse TEXT
사용할 웨어하우스입니다. 연결에 지정된 값을 재정의합니다.
--temporary-connection, -x
Config에 정의된 연결 대신 명령줄 매개 변수로 정의된 연결을 사용합니다. 기본값: False.
--mfa-passcode TEXT
다단계 인증(MFA)에 사용할 토큰입니다.
--enable-diag
연결 진단 보고서를 생성할지 여부입니다. 기본값: False.
--diag-log-path TEXT
생성된 보고서의 경로입니다. 기본값은 시스템 임시 디렉터리입니다. 기본값: <system_temporary_directory>.
--diag-allowlist-path TEXT
허용 목록 매개 변수가 포함된 JSON 파일의 경로입니다.
--oauth-client-id TEXT
Snowflake 통합을 위해 ID 공급자가 제공한 클라이언트 ID의 값입니다.
--oauth-client-secret TEXT
Snowflake 통합을 위해 ID 공급자가 제공한 클라이언트 시크릿의 값입니다.
--oauth-authorization-url TEXT
드라이버에 인증 코드를 제공하는 ID 공급자 엔드포인트입니다.
--oauth-token-request-url TEXT
드라이버에 액세스 토큰을 제공하는 ID 공급자 엔드포인트입니다.
--oauth-redirect-uri TEXT
인증 코드 리디렉션에 사용할 URI 입니다.
--oauth-scope TEXT
ID 공급자 승인 요청에서 요청된 범위입니다.
--oauth-disable-pkce
PKCE (Proof Key for Code Exchange)를 비활성화합니다. 기본값:
False
.--oauth-enable-refresh-tokens
실제 액세스 토큰이 오래되었을 때 자동 재인증을 활성화합니다. 기본값:
False
.--oauth-enable-single-use-refresh-tokens
일회용 새로 고침 토큰 시맨틱에 옵트인할지 여부입니다. 기본값:
False
.--client-store-temporary-credential
임시 자격 증명을 저장합니다.
--format [TABLE|JSON]
출력 형식을 지정합니다. 기본값: TABLE.
--verbose, -v
로그 수준
정보
이상에 대한 로그 항목을 표시합니다. 기본값: False.--debug
로그 수준
디버그
이상에 대한 로그 항목을 표시하며, 디버그 로그에는 추가 정보가 포함됩니다. 기본값: False.--silent
콘솔로의 중간 출력을 끕니다. 기본값: False.
--enhanced-exit-codes
실패 유형에 따라 종료 오류 코드를 차별화하십시오. 기본값: False.
--help
이 명령에 대한 도움말 텍스트를 표시합니다.
사용법 노트¶
다음 옵션 중 하나를 사용하여 실행할 SQL 쿼리를 지정할 수 있습니다.
--query
옵션을 사용하여 쿼리 문자열을 지정합니다.--filename
옵션을 사용하여 SQL 쿼리가 포함된 하나 이상의 파일을 실행합니다. 예:snow sql -f myfile.sql
snow 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 쿼리의
<% variable_name %>
자리표시자와-D
명령줄 옵션의 조합으로 SQL 쿼리를 템플릿화할 수 있습니다snow sql -q "select * from my-database order by <% column_name %>" -D "column_name=Country"
참고
현재 템플릿에는 SnowSQL
&variable_name
및<% variable_name %>
구문을 사용할 수 있습니다. 그러나 Snowflake는<% variable_name %>
구문을 사용할 것을 권장합니다.쿼리에서 스크립트 블록을 지정합니다. 예:
EXECUTE IMMEDIATE $$ -- Snowflake Scripting code DECLARE radius_of_circle FLOAT; area_of_circle FLOAT; BEGIN radius_of_circle := 3; area_of_circle := pi() * radius_of_circle * radius_of_circle; RETURN area_of_circle; END; $$ ;
참고
Snowflake CLI 명령줄에서 스크립트 블록을 직접 지정하는 경우, 일부 셸에서는 해당 구분 기호를 다른 것으로 해석하기 때문에
$$
구분 기호가 작동하지 않을 수 있습니다. 예를 들어 bash 및 zsh 셸은 이를 프로세스 ID (PID)로 해석합니다. 이 제한을 해결하려면 다음과 같은 대안을 사용할 수 있습니다.그래도 명령줄에서 스크립트 블록을 지정하려면
\$\$
에서처럼$$
구분 기호를 이스케이프 처리하면 됩니다.기본
$$
구분 기호가 있는 스크립트 블록을 별도의 파일에 넣고snow sql -f <filename>
명령으로 호출할 수도 있습니다.
개선된 오류 코드¶
--enhanced-exit-codes
옵션은 쿼리 실행으로 인한 문제인지 잘못된 명령 옵션으로 인한 문제인지 식별하는 데 도움이 되는 정보를 제공합니다. 이 옵션을 사용하면 snow sql
명령은 다음과 같은 반환 코드를 제공합니다.
0
: 성공적인 실행2
: 명령 매개 변수 문제5
: 쿼리 실행 문제1
: 기타 유형의 문제
명령이 실행된 후 echo $?
셸 명령을 사용하여 반환 코드를 확인할 수 있습니다.
이 예제에서 명령에는 쿼리 매개 변수(-q 'select 1'
)와 쿼리 파일 매개 변수(-f my.query
)가 모두 포함되어 있는데, 이는 잘못된 매개 변수 조합입니다.
snow sql --enhanced-exit-codes -q 'select 1' -f my.query
echo $?
2
다음 예는 명령에 잘못된 쿼리(slect의 철자가 틀린 경우)가 포함된 경우 --enhanced-exit-codes
옵션의 효과를 보여줍니다.
--enhanced-exit-codes
옵션을 사용하면 이 명령은 쿼리 오류를 나타내는5
종료 코드를 반환합니다.snow sql --enhanced-exit-codes -q 'slect 1' echo $?
5
--enhanced-exit-codes
옵션이 없으면 이 명령은 일반(기타) 오류를 나타내는1
종료 코드를 반환합니다.snow sql --enhanced-exit-codes -q 'slect 1' echo $?
1
또는 SNOWFLAKE_ENHANCED_EXIT_CODES
환경 변수를 1
로 설정하여 모든 snow sql
명령에 대해 개선된 반환 코드를 전송할 수 있습니다.
대화형 모드¶
snow sql
명령은 SQL 명령을 한 번에 하나씩 입력할 수 있는 대화형 모드를 지원합니다. 대화형 모드는 다음과 같은 기능을 제공합니다.
구문 강조 표시
입력 중 코드 완성
검색 가능한 기록
명령 기록을 검색하려면 CTRL-R 을 입력하십시오.
다중 라인 입력
세미콜론으로 끝나지 않는 줄에서 ENTER (
;
)를 누르면 문이 세미콜론으로 끝날 때까지 커서가 다음 줄로 이동하여 더 많은 명령을 볼 수 있습니다.
대화형 모드를 사용하려면 아래에 표시된 것처럼 snow sql
명령을 입력한 다음에 ENTER 를 누릅니다.
snow sql
이 명령은 SQL 명령을 대화형으로 입력할 수 있는 >
프롬프트가 있는 하위 셸을 엽니다.
$ snow sql
╭───────────────────────────────────────────────────────────────────────────────────╮
│ Welcome to Snowflake-CLI REPL │
│ Type 'exit' or 'quit' to leave │
╰───────────────────────────────────────────────────────────────────────────────────╯
>
그런 다음 아래와 같이 SQL 명령을 입력할 수 있습니다.
> create table my_table (c1 int);
+-------------------------------------+
| status |
|-------------------------------------|
| Table MY_TABLE successfully created.|
+-------------------------------------+
참고
각 SQL 문은 세미콜론으로 끝내야 합니다(;
).
대화형 모드를 종료하려면 exit
, quit
를 입력하거나 CTRL-D 를 누릅니다.
단일 트랜잭션에서 여러 명령 사용¶
--single-transaction
옵션을 사용하면 여러 개의 SQL 명령을 입력하여 전부 또는 전무 명령 세트로 실행할 수 있습니다. 단일 트랜잭션에서 명령을 실행하면 변경 사항을 커밋하기 전에 모든 명령이 성공적으로 완료되었는지 확인할 수 있습니다. 명령 중 하나라도 실패하면 성공한 명령의 변경 사항이 유지되지 않습니다.
다음 예는 성공적인 트랜잭션과 실패한 트랜잭션을 보여줍니다.
성공적인 명령 실행
snow sql -q "insert into my_tbl values (123); insert into my_tbl values (124);" --single-transaction
BEGIN; +----------------------------------+ | status | |----------------------------------| | Statement executed successfully. | +----------------------------------+ insert into my_tbl values (123); +-------------------------+ | number of rows inserted | |-------------------------| | 1 | +-------------------------+ insert into my_tbl values (124); +-------------------------+ | number of rows inserted | |-------------------------| | 1 | +-------------------------+ COMMIT +----------------------------------+ | status | |----------------------------------| | Statement executed successfully. | +----------------------------------+
그런 다음 명령이 데이터베이스에 커밋되었는지 확인할 수 있습니다.
snow sql -q "select count(*) from my_tbl"
select count(*) from my_tbl +----------+ | COUNT(*) | |----------| | 2 | +----------+
실패한 단일 트랜잭션
snow sql -q "insert into my_tbl values (123); insert into my_tbl values (124); select BAD;" --single-transaction
BEGIN; +----------------------------------+ | status | |----------------------------------| | Statement executed successfully. | +----------------------------------+ insert into my_tbl values (123); +-------------------------+ | number of rows inserted | |-------------------------| | 1 | +-------------------------+ insert into my_tbl values (124); +-------------------------+ | number of rows inserted | |-------------------------| | 1 | +-------------------------+ select BAD; ╭─ Error ───────────────────────────────────────────────────────────────────────────────╮ │ 000904 (42000): 01bc3b84-0810-0247-0001-c1be14ee11ce: SQL compilation error: error │ │ line 1 at position 7 │ │ invalid identifier 'BAD' │ ╰───────────────────────────────────────────────────────────────────────────────────────╯
그런 다음 명령이 데이터베이스에 커밋되지 않았는지 확인할 수 있습니다.
snow sql -q "select count(*) from my_tbl"select count(*) from my_tbl +----------+ | COUNT(*) | |----------| | 0 | +----------+
예¶
다음 예제에서는 SQL SYSTEM$CLIENT_VERSION_INFO 시스템 함수를 사용하여 클라이언트 및 드라이버에 대한 버전 정보를 반환합니다.
snow sql --query 'SELECT SYSTEM$CLIENT_VERSION_INFO();'
select current_version(); +-------------------+ | CURRENT_VERSION() | |-------------------| | 8.25.1 | +-------------------+
다음 예제는 클라이언트 측 변수를 사용하여 데이터베이스를 지정하는 방법을 보여줍니다.
snow sql -q "select * from <% database %>.logs" -D "database=dev"
명령이 실행되면
<% database %>
변수의 값dev
를 대체하여dev.logs
식별자를 생성한 다음select * from dev.logs
SQL 쿼리를 처리하기 위해 Snowflake로 보냅니다.참고
현재 템플릿에는 SnowSQL
&variable_name
및 &{ variable_name }
구문을 사용할 수 있습니다. 그러나 Snowflake는<% variable_name %>
구문을 사용할 것을 권장합니다.이 예제에서는
--env
옵션을 사용하여 환경 변수를 전달하는 방법을 보여줍니다.snow sql -q "select '<% ctx.env.test %>'" --env test=value_from_cli
기본적으로 Snowflake CLI 는 SQL 쿼리의 설명을 출력에서 제거합니다. 다음 예에서는
--retain-comments
옵션을 사용하여 쿼리 결과에 설명을 포함합니다.example.sql
파일에 다음 문과 설명이 포함되어 있다고 가정합니다.select 'column1'; -- My comment select 'column2';
다음 명령을 실행하면
-- My comment
가 쿼리 결과에 나타납니다.snow sql -f example.sql --retain-comments
select 'column1'; +-----------+ | 'COLUMN1' | |-----------| | ABC | +-----------+ -- My comment select 'bar'; +-----------+ | 'COLUMN2' | |-----------| | 123 | +-----------+