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
파일은 현재 작업 디렉터리 또는 -p
옵션으로 지정한 위치에 있어야 합니다.
프로젝트 정의 파일에 이러한 값을 저장하는 방법에 대한 자세한 내용은 SQL에서 변수 사용하기 섹션을 참조하십시오.