SQL을 사용하여 생성된 저장 프로시저에 대한 Scala 처리기 작성하기

처리기가 Scala로 작성된 저장 프로시저를 만들 수 있습니다. 저장 프로시저 내에서 Snowpark 라이브러리를 사용하여 Snowflake의 테이블에 대한 쿼리, 업데이트 및 기타 작업을 수행할 수 있습니다.

저장 프로시저를 사용하면 Snowflake 웨어하우스를 컴퓨팅 프레임워크로 사용하여 Snowflake 내에서 데이터 파이프라인을 구축하고 실행할 수 있습니다. 데이터 파이프라인용 코드의 경우, Scala용 Snowpark API를 사용하여 저장 프로시저를 작성합니다. 이러한 저장 프로시저의 실행을 예약하려면 작업 을 사용합니다.

처리기 코드가 실행될 때 로그 및 추적 데이터를 캡처할 수 있습니다. 자세한 내용은 로깅, 추적 및 메트릭 섹션을 참조하십시오.

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

  1. 사용 중인 환경이 전제 조건 을 충족하는지 확인하십시오.

  2. 로컬에서 개발하는 경우 Snowpark를 사용하도록 환경을 설정합니다.

  3. 처리기를 인라인 또는 스테이지 에 배포할지 여부를 선택합니다.

  4. 처리기 클래스 또는 오브젝트, 메서드 또는 함수, 성능 에 대한 지침을 따르십시오.

  5. 데이터 액세스, 파일 읽기, 테이블 형식 데이터 반환, 로깅 및 추적 과 같은 기능에 대한 지원을 구현합니다.

  6. 코드의 종속성을 Snowflake에서 사용 가능하도록 설정하십시오.

  7. 저장 프로시저를 생성할 때 처리기 코드를 인라인으로 포함하거나 스테이지에서 가져옵니다.

참고

익명 프로시저를 만들기도 하고 호출도 하려면 CALL(익명 프로시저 사용) 를 사용하십시오. 익명 프로시저를 만들고 호출하는 데는 CREATE PROCEDURE 스키마 권한이 있는 역할이 필요하지 않습니다.

전제 조건 충족하기

버전 1.1.0 또는 최신 버전의 Snowpark 라이브러리를 사용해야 합니다.

처리기 코드가 스테이지에 저장될 저장 프로시저를 작성하는 경우, Java 버전 11.x에서 실행되도록 클래스를 컴파일해야 합니다.

Snowpark용 개발 환경 설정하기

로컬에서 코드를 개발하는 경우 Snowpark 라이브러리를 사용하도록 개발 환경을 설정하십시오. Snowpark Scala를 위한 개발 환경 설정하기 섹션을 참조하십시오.

구조 및 빌드 처리기 코드

프로시저를 생성하는 SQL로 처리기 소스 코드를 인라인으로 유지하거나 처리기로 컴파일된 결과를 별도의 위치에 유지하고 SQL에서 참조할 수 있습니다. 자세한 내용은 처리기 코드를 인라인 또는 스테이지에 유지하기 섹션을 참조하십시오.

프로시저와 함께 사용할 처리기 소스 코드 작성에 대한 자세한 내용은 처리기 코드 패키징하기 섹션을 참조하십시오.

처리기 클래스 또는 오브젝트에 대한 지침

처리기 클래스 또는 오브젝트를 작성할 때 다음 사항에 유의하십시오.

  • 클래스(또는 오브젝트) 및 메서드는 보호되거나 비공개여서는 안 됩니다.

  • 메서드가 정적이 아니고 사용자가 생성자를 정의하려는 경우, 클래스에 대해 인자 없는 생성자를 정의합니다. Snowflake는 초기화 시 이 인자 없는 생성자를 호출하여 클래스의 인스턴스를 만듭니다.

  • 동일한 클래스 또는 오브젝트에서 서로 다른 저장 프로시저에 대해 서로 다른 메서드를 정의할 수 있습니다.

처리기 메서드 또는 함수에 대한 가이드라인

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

  • Snowpark Session 오브젝트를 메서드 또는 함수의 첫 번째 인자로 지정합니다.

    저장 프로시저를 호출하면 Snowflake는 자동으로 Session 오브젝트를 생성하여 저장 프로시저에 전달합니다. (Session Session 오브젝트를 직접 만들 수는 없습니다.)

  • 나머지 인자와 반환 값의 경우, Snowflake 데이터 타입 에 해당하는 Scala 타입 을 사용합니다.

  • 메서드 또는 함수는 값을 반환해야 합니다.

  • 코드 활동으로 타이머가 재설정되지 않는 한 저장 프로시저 실행 시간이 초과됩니다. 특히 시간 제한 타이머는 파일 작업, 쿼리, 결과 세트를 통한 반복을 포함하여, 코드와 데이터의 상호 작용에 의해 재설정됩니다.

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

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

처리기 성능 및 보안에 대한 가이드라인

Snowflake에서 코드가 잘 실행되도록 하려면 다음 가이드라인을 따르십시오.

  • 사용되는 메모리양을 제한합니다.

    Snowflake는 필요한 메모리 양 측면에서 메서드에 제한을 둡니다. 너무 많이 사용하지 않도록 방지하는 방법에 대한 자세한 내용은 Snowflake에서 적용한 제약 조건 내에서 유지되는 처리기 설계하기 섹션을 참조하십시오.

  • 스레드로부터 안전한 코드 작성하기

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

  • 보안 제한 사항을 이해하십시오.

    처리기 코드는 제한된 엔진 내에서 실행되므로 UDF 및 프로시저의 보안 모범 사례 에 설명된 규칙을 따라야 합니다.

  • 소유자의 권한 또는 호출자의 권한 사용 결정하기

    저장 프로시저를 작성하려고 계획할 때 저장 프로시저를 호출자의 권한으로 실행할지 소유자의 권한으로 실행할지 여부를 고려하십시오.

  • 저장 프로시저의 시간 초과 동작을 염두에 두십시오.

    코드 활동으로 타이머가 재설정되지 않는 한 저장 프로시저 실행 시간이 초과됩니다. 특히 시간 제한 타이머는 파일 작업, 쿼리, 결과 세트를 통한 반복을 포함하여, 코드와 데이터의 상호 작용에 의해 재설정됩니다.

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

처리기 코드가 처리기 자체 외부에 정의된 코드(예: JAR 파일의 클래스) 또는 리소스 파일에 의존하는 경우 이러한 종속성을 스테이지에 업로드하여 코드에서 사용 가능하게 만들 수 있습니다. 프로시저를 생성할 때 IMPORTS 절을 사용하여 이러한 종속성을 참조할 수 있습니다.

자세한 내용은 코드에 종속성을 사용할 수 있도록 만들기 섹션을 참조하십시오.