저장 프로시저에 대한 Python 처리기 작성하기

저장 프로시저가 호출될 때 실행되는 처리기로 Python 코드를 작성할 수 있습니다. 이 섹션에서는 처리기의 설계에 대해 설명합니다.

여러 가지 방법으로 처리기 코드에서 저장 프로시저를 만들 수 있습니다.

저장 프로시저 작성 계획하기

저장 프로시저는 Snowflake 내부에서 실행되므로 그 점을 염두에 두고 작성하는 코드를 계획해야 합니다.

  • 사용되는 메모리양을 제한합니다. Snowflake는 필요한 메모리 양 측면에서 메서드에 제한을 둡니다. 지침은 Snowflake에서 적용한 제약 조건 내에서 유지되는 처리기 설계하기 섹션을 참조하십시오.

  • 처리기 메서드 또는 함수가 스레드로부터 안전한지 확인하십시오.

  • 규칙 및 보안 제한 사항을 따르십시오. UDF 및 프로시저의 보안 모범 사례 섹션을 참조하십시오.

  • 저장 프로시저를 호출자의 권한으로 실행할지 소유자의 권한으로 실행할지 여부를 결정합니다.

  • 저장 프로시저를 실행하는 데 사용되는 snowflake-snowpark-python 버전을 고려하십시오. 저장 프로시저 출시 프로세스의 제한 사항으로 인해, Python 저장 프로시저 환경에서 사용할 수 있는 snowflake-snowpark-python 라이브러리는 보통 공개적으로 출시된 버전보다 한 버전 뒤처진 버전입니다. 다음 SQL을 사용하여 사용 가능한 최신 버전을 찾습니다.

    SELECT * FROM information_schema.packages WHERE package_name = 'snowflake-snowpark-python' ORDER BY version DESC;
    
    Copy

메서드 또는 함수 작성하기

저장 프로시저에 대한 메서드 또는 함수를 작성할 때 다음 사항에 유의하십시오.

  • Snowpark Session 오브젝트를 메서드 또는 함수의 첫 번째 인자로 지정합니다. 저장 프로시저를 호출하면 Snowflake는 자동으로 Session 오브젝트를 생성하여 저장 프로시저에 전달합니다. (Session Session 오브젝트를 직접 만들 수는 없습니다.)

  • 나머지 인자와 반환 값의 경우, Snowflake 데이터 타입 에 해당하는 Python 타입을 사용합니다. Snowflake는 매개 변수 및 반환 형식에 대한 SQL-Python 데이터 타입 매핑 에 나열된 Python 데이터 타입을 지원합니다.

  • 프로시저의 핸들러 내에서 비동기 하위 작업을 실행하는 경우(예: DataFrame.collect_nowait 를 사용하는 경우) “실행 후 무시”는 지원되지 않습니다.

    즉, 상위 프로시저 작업이 완료될 때 핸들러가 아직 실행 중인 하위 쿼리를 발행하면 하위 작업은 자동으로 취소됩니다.

오류 처리

일반적인 Python 예외 처리 기법을 사용하여 프로시저 내에서 오류를 포착할 수 있습니다.

메서드 내에서 포착되지 않은 예외가 발생하면 Snowflake는 예외에 대한 스택 추적을 포함하는 오류를 발생시킵니다. 처리되지 않은 예외 로깅 이 활성화되면 Snowflake는 이벤트 테이블에 처리되지 않은 예외에 대한 데이터를 기록합니다.

코드에 종속성을 사용할 수 있도록 만들기

처리기 코드가 처리기 자체 외부에 정의된 코드(예: 모듈에 정의된 코드) 또는 리소스 파일에 의존하는 경우 이러한 종속성을 스테이지에 업로드하여 코드에서 사용 가능하게 만들 수 있습니다. 코드에 종속성을 사용할 수 있도록 만들기 섹션을 참조하시고, Python 워크시트에 대해서는 스테이지의 Python 파일을 워크시트에 추가하기 섹션을 참조하십시오.

SQL을 사용하여 저장 프로시저를 만드는 경우 CREATE PROCEDURE 문 을 작성할 때 IMPORTS 절을 사용하여 종속성 파일을 가리킵니다.