저장 프로시저 만들기

Snowflake에서 사용 가능한 여러 메서드 중 하나를 사용하여 저장 프로시저 를 만들 수 있습니다. 이러한 메서드는 이 항목에 설명되어 있습니다.

프로시저 만들기

  1. Python, Java, Scala 등 지원되는 여러 언어 중 하나를 사용하여 프로시저 로직을 처리기로 작성하십시오.

  2. 도구를 선택하거나 API 에서 작성한 처리기로 프로시저를 만듭니다.

    각 항목에 대한 자세한 내용은 프로시저 생성을 위한 도구 섹션을 참조하십시오.

    SQL

    SQL 을 사용하여 여러 언어 중 하나로 로직을 작성하십시오.

    Snowpark

    Java, Python 또는 Scala용 Snowpark API 를 사용하십시오.

    명령줄

    Snowflake CLI 명령을 실행하여 프로시저를 만듭니다.

    Python API

    클라이언트 측 Python 명령을 실행하여 프로시저를 생성합니다.

    REST

    RESTful API 에 요청하여 프로시저를 생성합니다.

  3. 필요에 따라 여러 도구 중 하나를 사용하여 프로시저를 실행합니다.

프로시저 생성을 위한 도구

사용 가능한 언어 및 스킬 세트에 따라 Snowflake에서 사용할 수 있는 여러 가지 방법 중 하나를 사용하여 프로시저 를 만들 수 있습니다. 다음 표에서 필요에 맞는 도구를 선택하십시오.

언어

접근 방식

SQL

SQL 명령을 실행합니다(예: Snowsight 사용).

SQL CREATE PROCEDURE 명령을 실행하여 다음 언어 중 하나로 작성된 처리기 코드가 포함된 프로시저를 생성합니다.

Java, Python 또는 Scala

지원되는 언어 중 하나로 코드를 작성한 다음 로컬에서 코드를 실행하여 Snowflake에서 작업을 수행합니다.

다음 언어 중 하나로 Snowpark API를 사용하는 클라이언트 코드를 실행합니다.

명령줄

명령줄에서 명령을 실행하여 Snowflake 엔터티를 만들고 관리할 수 있습니다.

Snowflake CLI 의 명령을 실행합니다.

Python

클라이언트에서 Snowflake에서 관리 작업을 실행하는 코드를 작성합니다.

Snowflake Python API 를 사용하는 코드를 실행합니다.

RESTful API (언어 불문)

RESTful 엔드포인트에 요청하여 Snowflake 엔터티를 생성하고 관리하십시오.

Snowflake REST API 를 사용하여 프로시저 생성 요청을 합니다.

키 속성

다음은 프로시저를 만들 때 필요하거나 일반적으로 사용되는 몇 가지 속성에 대한 설명입니다.

프로시저 이름:

프로시저 이름은 처리기의 이름과 일치할 필요는 없습니다. 이름 제약 조건과 규칙에 대한 자세한 내용은 프로시저와 UDF의 명명 및 오버로딩 섹션을 참조하십시오.

인자:

요구 사항에 대한 자세한 내용은 UDF 및 저장 프로시저에 대한 인자 정의하기 섹션을 참조하십시오.

반환 유형:

Snowflake가 SQL 데이터 타입을 처리기 데이터 타입에 매핑하는 방법에 대한 자세한 내용은 SQL 및 처리기 언어 간의 데이터 타입 매핑 섹션을 참조하십시오.

처리기 이름:

필요한 경우 이는 프로시저가 호출될 때 실행되는 코드를 포함하는 클래스 또는 메서드의 이름입니다. Java, Python, Scala로 작성된 처리기에 대해서만 처리기 이름을 지정해야 합니다. JavaScript 및 Snowflake Scripting 처리기의 경우 인라인으로 지정된 모든 코드가 처리기로 실행됩니다.

종속성:

Java, Python 또는 Scala로 작성된 처리기의 경우 프로시저를 생성할 때와 같이 Snowpark 라이브러리를 지정해야 할 수도 있습니다.

처리기에서 종속 항목을 사용할 수 있도록 만드는 방법에 대한 자세한 내용은 코드에 종속성을 사용할 수 있도록 만들기 섹션을 참조하십시오.

처리기 언어 런타임:

처리기 언어가 Java, Python 또는 Scala인 경우 런타임 버전을 지정하여 사용할 지원되는 런타임 버전을 표시합니다. 기본 버전을 사용하는 경우 시간이 지나면 기본값이 변경된다는 점에 유의하십시오.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE PROCEDURE

스키마

USAGE

절차

새로 생성된 프로시저에 대한 USAGE 권한을 역할에 부여하면 그 역할을 가진 사용자가 Snowflake의 다른 곳에서 프로시저를 호출할 수 있습니다.

USAGE

외부 액세스 통합

프로시저를 만들 때 지정한 통합이 있는 경우 필수입니다. 자세한 내용은 CREATE EXTERNAL ACCESS INTEGRATION 섹션을 참조하십시오.

READ

시크릿

프로시저를 만들 때 지정한 시크릿(있는 경우)에 필수입니다. 자세한 내용은 자격 증명을 나타내는 시크릿 만들기함수 또는 프로시저에서 외부 액세스 통합 사용하기 섹션을 참조하십시오.

USAGE

스키마

프로시저를 만들 때 지정한 시크릿이 포함된 스키마(있는 경우)에 필수입니다. 자세한 내용은 자격 증명을 나타내는 시크릿 만들기함수 또는 프로시저에서 외부 액세스 통합 사용하기 섹션을 참조하십시오.

스키마의 모든 오브젝트에 대해 작업을 수행하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

모든 처리기 언어

  • 저장 프로시저는 오버로딩 을 지원합니다. 두 프로시저에 있는 매개 변수의 개수가 다르거나 매개 변수에 대한 데이터 타입이 다른 경우 두 프로시저는 같은 이름을 가질 수 있습니다.

  • 저장 프로시저는 원자성이 아닙니다. 저장 프로시저의 한 문이 실패할 경우 저장 프로시저의 다른 문이 반드시 롤백되는 것은 아닙니다. 저장 프로시저 및 트랜잭션에 대한 자세한 내용은 트랜잭션 관리 를 참조하십시오.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

조직에서 호출자의 권한 저장 프로시저와 소유자의 권한 저장 프로시저를 혼합하여 사용하는 경우, 저장 프로시저의 명명 규칙을 사용하여 개별 저장 프로시저가 호출자의 권한 저장 프로시저인지, 소유자의 권한 저장 프로시저인지를 나타낼 수 있습니다.

Java

알려진 제한 사항 섹션을 참조하십시오.

Javascript

JavaScript 저장 프로시저는 문자열(예: 성공/실패 표시기) 또는 숫자(예: 오류 코드)와 같은 단일 값만 반환할 수 있습니다. 더 광범위한 정보를 반환해야 하는 경우 구분 기호(예: 쉼표)로 구분된 값을 포함하는 VARCHAR나 VARIANT 와 같은 반정형 데이터 타입을 반환할 수 있습니다.

Python

알려진 제한 사항 섹션을 참조하십시오.

Scala

알려진 제한 사항 섹션을 참조하십시오.

SQL로 저장 프로시저 만들기

다음 단계를 사용하여 SQL 로 저장 프로시저를 만들 수 있습니다.

참고

나중에 사용할 수 있도록 저장되지 않는 프로시저를 생성하고 호출할 수도 있습니다. 그와 같은 종류의 프로시저의 속성 중 다수는 저장 프로시저의 속성과 동일합니다. 자세한 내용은 CALL(익명 프로시저 사용) 섹션을 참조하십시오.

  1. 프로시저가 호출될 때 실행되는 처리기 코드를 작성합니다.

    지원되는 처리기 언어 중 하나를 사용할 수 있습니다. 자세한 내용은 지원 언어 및 도구 섹션을 참조하십시오.

  2. 처리기 코드를 CREATE PROCEDURE SQL 문과 인라인으로 유지할지, 아니면 스테이지에서 참조할지 선택합니다.

    각각 나름의 장점이 있습니다. 자세한 내용은 처리기 코드를 인라인 또는 스테이지에 유지하기 섹션을 참조하십시오.

  3. 프로시저의 속성을 지정하여 SQL에서 CREATE PROCEDURE 문을 실행합니다.

    다음 예제의 코드는 인라인 처리기 MyClass.myMethod 를 사용하는 myProc 라는 프로시저를 생성합니다. 처리기 언어는 Java이며 Scala와 Python으로 작성된 프로시저 처리기와 마찬가지로 Snowpark 라이브러리의 Session 오브젝트가 필요합니다. 여기서 PACKAGES 절은 Snowflake에 포함된 Snowpark 라이브러리를 참조합니다.

    CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT)
      RETURNS STRING
      LANGUAGE JAVA
      RUNTIME_VERSION = '11'
      PACKAGES = ('com.snowflake:snowpark:latest')
      HANDLER = 'MyClass.myMethod'
      AS
      $$
        import com.snowflake.snowpark_java.*;
    
        public class MyClass
        {
          public String myMethod(Session session, String fromTable, String toTable, int count)
          {
            session.table(fromTable).limit(count).write().saveAsTable(toTable);
            return "Success";
          }
        }
      $$;
    
    Copy