Snowflake CLI, SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기¶
이 항목에서는 Snowflake CLI, SnowSQL, Classic Console 및 Python Connector 에서 Snowflake Scripting 예제를 실행하는 방법을 설명합니다.
참고
다른 클라이언트 및 인터페이스(예: Snowsight 또는 JDBC 드라이버)를 사용하는 경우 이 항목을 건너뛰고 Snowflake Scripting 블록 을 참조하십시오.
소개¶
현재 다음 인터페이스는 Snowflake Scripting 블록을 올바르게 구문 분석하지 못합니다.
Python Connector 코드의
execute_stream()
및execute_string()
메서드참고
다른 Python Connector 메서드는 Snowflake Scripting 블록을 올바르게 구문 분석합니다.
Snowflake Scripting 블록을 입력하고 실행하면 다음 오류가 발생할 수 있습니다.
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
이 문제를 해결하려면 이러한 인터페이스를 사용하는 경우 Snowflake Scripting 블록의 시작과 끝 부분에 구분 기호를 사용해야 합니다.
다음 섹션에서는 이 작업을 수행하는 방법을 설명합니다.
저장 프로시저의 블록 주위에 문자열 상수 구분 기호 사용하기¶
저장 프로시저를 만드는 경우 Snowflake Scripting 블록을 작은따옴표 또는 이중 달러 기호 로 묶습니다. 예:
CREATE OR REPLACE PROCEDURE myprocedure()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
-- 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>
명령으로 호출할 수도 있습니다.
EXECUTE IMMEDIATE에 문자열 리터럴로 블록 전달하기¶
익명 블록 을 작성하는 경우 블록을 EXECUTE IMMEDIATE 명령에 문자열 리터럴로 전달합니다. 문자열 리터럴을 구분하려면 작은따옴표 또는 이중 달러 기호 를 사용하십시오.
예:
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;
$$
;
대안으로, 블록을 포함하는 문자열 리터럴인 세션 변수 를 정의하고 해당 세션 변수를 EXECUTE IMMEDIATE 명령에 전달할 수 있습니다. 예:
SET stmt =
$$
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;
$$
;
EXECUTE IMMEDIATE $stmt;
참고
Snowflake CLI 명령줄에서 스크립트 블록을 직접 지정하는 경우, 일부 셸에서는 해당 구분 기호를 다른 것으로 해석하기 때문에 $$
구분 기호가 작동하지 않을 수 있습니다. 예를 들어 bash 및 zsh 셸은 이를 프로세스 ID (PID)로 해석합니다. 이 제한을 해결하려면 다음과 같은 대안을 사용할 수 있습니다.
그래도 명령줄에서 스크립트 블록을 지정하려면
\$\$
에서처럼$$
구분 기호를 이스케이프 처리하면 됩니다.기본
$$
구분 기호가 있는 스크립트 블록을 별도의 파일에 넣고snow sql -f <filename>
명령으로 호출할 수도 있습니다.