Scala로 DataFrames용 저장 프로시저 만들기

Snowpark API를 사용하면 사용자 지정 람다 및 함수의 저장 프로시저를 만들 수 있습니다. 이러한 저장 프로시저를 호출하여 DataFrame의 데이터를 처리할 수 있습니다.

다음을 생성할 수 있습니다.

임시 저장 프로시저 만들기

현재 세션 동안만 지속될 임시 프로시저를 생성할 수 있습니다. 임시 프로시저는 다음과 같을 수 있습니다.

  • 이를 나타내는 com.snowflake.snowpark.StoredProcedure 변수를 프로시저를 호출하는 코드에 전달하는 등 참조로 호출할 수 있는 익명 프로시저.

  • 사용자가 할당하는 이름을 가진 명명된 프로시저. 세션 내의 다른 코드에서 이름으로 프로시저를 호출할 수 있습니다.

임시 프로시저를 생성하려면 com.snowflake.snowpark.SProcRegistrationregisterTemporary 메서드 중 하나로 등록하십시오. 이 메서드는 다양한 수의 프로시저 인자를 지원하기 위해 여러 번 오버로드됩니다.

registerTemporary 호출 시 다음을 인자로 전달할 수 있습니다.

  • 프로시저의 이름(명명된 프로시저인 경우).

  • 람다 식으로 표현되는 프로시저 자체.

익명의 임시 프로시저 만들기

익명의 임시 프로시저를 만들려면 이름을 지정하지 않고 임시 프로시저로 등록합니다. Snowflake는 자체적으로 사용할 숨겨진 이름을 만듭니다.

다음 예제의 코드는 SProcRegistration.registerTemporary 메서드를 호출하여 람다 함수에서 익명 프로시저를 만듭니다. 함수 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

val session = Session.builder.configFile("my_config.properties").create

val sp = session.sproc.registerTemporary(
  (session: Session, num: Int) => num + 1
)
Copy

다음 예의 코드는 com.snowflake.snowpark.Session 클래스의 storedProcedure 메서드를 사용하고 sp 변수와 1 을 인자로 전달하여 익명 프로시저를 호출합니다. Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(sp, 1).show()
Copy

명명된 임시 프로시저 만들기

명명된 임시 프로시저를 만들려면 임시 프로시저의 이름을 인자 중 하나로 전달하여 임시 프로시저로 등록합니다.

다음 예제의 코드는 registerTemporary 메서드를 호출하여 프로시저의 이름을 인자로 전달해 람다 식에서 add_two 라는 명명된 임시 프로시저를 만듭니다. 이 메서드는 Int 를 단일 매개 변수 유형으로 등록합니다.

프로시저 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

val session = Session.builder.configFile("my_config.properties").create

val procName: String = "add_two"
val tempSP: StoredProcedure =
  session.sproc.registerTemporary(
    procName,
    (session: Session, num: Int) => num + 2)
Copy

다음 예의 코드는 com.snowflake.snowpark.Session 클래스의 storedProcedure 메서드를 사용하고 프로시저 이름과 1 을 인자로 전달하여 add_two 프로시저를 호출합니다. Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(procName, 1).show()
Copy

영구 저장 프로시저 만들기

Snowflake 워크시트 내에서 호출하는 경우를 포함하여 어떤 세션에서든 호출할 수 있는 영구 저장 프로시저를 만들 수 있습니다.

영구 프로시저를 만들려면 com.snowflake.snowpark.SProcRegistration 클래스의 registerPermanent 메서드로 등록하십시오. 이 메서드는 다양한 프로시저 요구 사항을 지원하기 위해 여러 번 오버로드됩니다.

registerPermanent 호출 시 다음을 인자로 전달합니다.

  • 프로시저의 이름.

  • 람다 식으로 표현되는 프로시저 자체.

  • Snowflake가 프로시저 컴파일 결과 파일을 복사해야 하는 기존 스테이지.

    Snowflake는 종속성 및 람다 함수를 포함한 모든 관련 데이터를 복사합니다. 이 저장 프로시저는 현재 세션 외부에서 호출할 수 있으므로 이는 영구 스테이지(임시 세션이 아님)여야 합니다. 프로시저가 나중에 삭제되면 스테이지에서 관련 파일을 수동으로 제거해야 합니다.

  • 이 프로시저를 호출자의 권한으로 실행해야 할지 나타내는 부울 값.

    호출자의 권한과 소유자의 권한에 대한 자세한 내용은 Understanding Caller’s Rights and Owner’s Rights Stored Procedures 섹션을 참조하십시오.

다음 예의 코드에서는 registerPermanent 메서드를 호출하여 람다 식에서 add_hundred 라는 영구 프로시저를 만듭니다.

이 메서드는 프로시저와 해당 종속성에 대해 sproc_libs 라는 스테이지를 지정합니다. 또한 호출자의 권한으로 프로시저를 실행해야 함을 지정합니다.

프로시저 자체는 Session 오브젝트와 정수를 인자로 사용합니다. Session 인자는 호출자가 인자로 전달할 필요가 없는 암시적 매개 변수를 나타냅니다.

val session = Session.builder.configFile("my_config.properties").create

val procName: String = "add_hundred"
val stageName: String = "sproc_libs"

val sp: StoredProcedure =
  session.sproc.registerPermanent(
    procName,
    (session: Session, num: Int) => num + 100,
    stageName,
    true
  )
Copy

다음 예의 코드는 com.snowflake.snowpark.Session 클래스의 storedProcedure 메서드를 사용하여 add_hundred 프로시저를 호출합니다. 이 호출은 프로시저 이름과 1 을 인자로 전달합니다. 처리기에서 인자로 사용되는 Session 오브젝트는 프로시저 호출 시 전달할 필요가 없는 암시적 인자입니다.

session.storedProcedure(procName, 1).show()
Copy