Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector¶
This topic explains how to run the Snowflake Scripting examples in Snowflake CLI, SnowSQL, and the Python Connector.
참고
If you are using other clients and interfaces, such as Snowflake CLI or the JDBC driver, you can skip this topic and refer to Snowflake Scripting blocks.
소개¶
현재 다음 인터페이스는 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>명령으로 호출할 수도 있습니다.