저장 프로시저 만들기

논리에 사용할 처리기를 포함하여 프로시저의 속성을 지정하는 CREATE PROCEDURE 명령으로 저장 프로시저를 만듭니다.

이 항목에는 프로시저를 만드는 단계가 나열되어 있습니다. 예를 보려면 CREATE PROCEDURE 참조 를 참조하십시오.

참고

나중에 사용할 수 있도록 저장되지 않는 프로시저를 생성하고 호출할 수도 있습니다. 그와 같은 종류의 프로시저의 속성 중 다수는 저장 프로시저의 속성과 동일합니다. 자세한 내용은 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

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

    • 프로시저 이름입니다.

      이름은 처리기의 이름과 일치할 필요가 없습니다. CREATE PROCEDURE 문은 프로시저 이름을 처리기와 연관시킵니다.

      이름 제약 조건과 규칙에 대한 자세한 내용은 프로시저와 UDF의 명명 및 오버로딩 섹션을 참조하십시오.

    • 프로시저 인자(있는 경우).

      UDF 및 저장 프로시저에 대한 인자 정의하기 섹션을 참조하십시오.

    • RETURNS 절이 있는 반환 유형입니다.

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

    • HANDLER 절이 있는 처리기 이름입니다.

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

      다음 표에는 처리기 언어에 따라 HANDLER 절의 값 형식을 설명합니다.

      처리기 언어

      값 형식

      Java

      클래스 및 메서드 이름.

      예: MyClass.myMethod

      JavaScript

      없습니다.

      Python

      클래스가 사용되는 경우 클래스 및 메서드 이름이며, 그렇지 않으면 함수 이름.

      예: module.my_function 또는 my_function

      Scala

      오브젝트 및 메서드 이름.

      예: MyObject.myMethod

      Snowflake Scripting

      없습니다.

    • IMPORTS 또는 PACKAGES 절을 사용하여 처리기에 필요한 종속 항목(있는 경우).

      Java, Python 또는 Scala로 작성된 처리기의 경우 CREATE PROCEDURE 참조에 설명된 대로 Snowpark 라이브러리를 지정해야 합니다.

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

    • RUNTIME_VERSION 절이 있는 처리기 언어 런타임.

      처리기 언어가 Java, Python 또는 Scala인 경우 RUNTIME_VERSION 절을 사용하여 지원되는 런타임 버전 중 어떤 버전을 사용할지 지정합니다. 이 절을 생략하면 Snowflake가 기본값을 사용하게 되며 이는 나중에 변경할 수 있습니다.

인라인 처리기

다음 예제의 코드는 인라인 Python 처리기 함수 run 을 사용하여 my_proc 라는 프로시저를 생성합니다. 이 코드는 PACKAGES 절을 통해 포함된 Python용 Snowpark 라이브러리를 참조하며 Python이 프로시저 처리기 언어인 경우 이 라이브러리의 Session 이 필요합니다.

create or replace procedure my_proc(from_table string, to_table string, count int)
  returns string
  language python
  runtime_version = '3.8'
  packages = ('snowflake-snowpark-python')
  handler = 'run'
as
$$
def run(session, from_table, to_table, count):
  session.table(from_table).limit(count).write.save_as_table(to_table)
  return "SUCCESS"
$$;
Copy

스테이징된 처리기

다음 예제의 코드는 스테이징된 Java 처리기 메서드 MyClass.myMethod 를 사용하여 my_proc 라는 프로시저를 생성합니다. 이 코드는 PACKAGES 절을 통해 포함된 Java용 Snowpark 라이브러리를 참조하며 Java가 프로시저 처리기 언어인 경우 이 라이브러리의 Session 이 필요합니다. IMPORTS 절이 있을 경우 이 코드는 처리기 코드가 있는 스테이징된 JAR 파일을 참조합니다.

create or replace procedure my_proc(fromTable string, toTable string, count int)
  returns string
  language java
  runtime_version = '11'
  packages = ('com.snowflake:snowpark:latest')
  imports = ('@mystage/myjar.jar')
  handler = 'MyClass.myMethod';
Copy