Snowpark Scala에서 함수 및 저장 프로시저 호출하기

DataFrame에서 데이터를 처리하기 위해 시스템 정의 SQL 함수, 사용자 정의 함수, 저장 프로시저를 호출할 수 있습니다. 이 항목에서는 Snowpark에서 이를 호출하는 방법에 대해 설명합니다.

이 항목의 내용:

시스템 정의 함수 호출하기

시스템 정의 SQL 함수 를 호출해야 하는 경우, com.snowflake.snowpark.functions 오브젝트 에서 이와 동일한 함수를 사용하십시오.

다음 예에서는 functions 오브젝트의 upper 함수(시스템 정의 UPPER 함수와 동일)를 호출하여 대문자로 된 이름 열의 값을 반환합니다.

// Import the upper function from the functions object.
import com.snowflake.snowpark.functions._
...
session.table("products").select(upper(col("name"))).show()
Copy

함수 오브젝트에서 시스템 정의 SQL 함수를 사용할 수 없는 경우, 다음 접근 방식 중 하나를 사용할 수 있습니다.

  • callBuiltin 함수를 사용하여 시스템 정의 함수를 호출합니다.

  • builtin 함수를 사용하여 시스템 정의 함수를 호출하는 데 사용할 수 있는 함수 오브젝트를 만듭니다.

callBuiltinbuiltincom.snowflake.snowpark.functions 오브젝트에 정의되어 있습니다.

callBuiltin 의 경우, 시스템 정의 함수의 이름을 첫 번째 인자로 전달합니다. 열 값을 시스템 정의 함수에 전달해야 하는 경우, Column 오브젝트를 정의하고 callBuiltin 함수에 대한 추가 인자로서 전달하십시오.

다음 예에서는 시스템 정의 함수 RADIANS 를 호출하여 col1 열의 값을 전달합니다.

// Import the callBuiltin function from the functions object.
import com.snowflake.snowpark.functions._
...
// Call the system-defined function RADIANS() on col1.
val result = df.select(callBuiltin("radians", col("col1"))).collect()
Copy

callBuiltin 함수는 DataFrame 변환 메서드 (예: filter, select 등)에 전달할 수 있는 Column 을 반환합니다.

builtin 의 경우, 시스템 정의 함수의 이름을 전달하고, 반환된 함수 오브젝트를 사용하여 시스템 정의 함수를 호출합니다. 예:

// Import the callBuiltin function from the functions object.
import com.snowflake.snowpark.functions._
...
// Create a function object for the system-defined function RADIANS().
val radians = builtin("radians")
// Call the system-defined function RADIANS() on col1.
val result = df.select(radians(col("col1"))).collect()
Copy

스칼라 사용자 정의 함수(UDF) 호출하기

UDF를 호출하는 방법은 UDF가 생성된 방식에 따라 다릅니다.

  • 익명 UDF 를 호출하려면 UDF 생성 시 반환된 UserDefinedFunction 오브젝트의 apply 메서드를 호출합니다.

    UDF에 전달하는 인자는 Column 오브젝트여야 합니다. 리터럴을 전달해야 하는 경우 리터럴을 열 오브젝트로 사용하기 에 설명된 대로 lit() 를 사용하십시오.

  • 이름으로 등록한 UDF, 그리고 CREATE FUNCTION 을 실행하여 만든 UDF를 호출하려면 com.snowflake.snowpark.functions 오브젝트에서 callUDF 함수를 사용하십시오.

    UDF의 이름을 첫 번째 인자로서 전달하고 모든 UDF 매개 변수를 추가 인자로서 전달하십시오.

UDF를 호출하면 UDF의 반환 값이 포함된 Column 오브젝트가 반환됩니다.

다음 예에서는 UDF 함수 myFunction 을 호출하여 col1col2 열의 값을 전달합니다. 이 예에서는 myFunction 의 반환 값을 DataFrame의 select 메서드로 전달합니다.

// Import the callUDF function from the functions object.
import com.snowflake.snowpark.functions._
...
// Runs the scalar function 'myFunction' on col1 and col2 of df.
val result =
    df.select(
        callUDF("myDB.schema.myFunction", col("col1"), col("col2"))
    ).collect()
Copy

테이블 함수 호출(시스템 함수 및 UDTF)

테이블 함수 또는 사용자 정의 테이블 함수(UDTF) 를 호출하려면 다음을 수행합니다.

  1. 테이블 함수의 이름을 전달하여 TableFunction 오브젝트를 생성합니다.

    Snowpark에서 UDTF를 만드는 경우, 단순히 UDTFRegistration.registerTemporary 또는 UDTFRegistration.registerPermanent 메서드에 의해 반환된 TableFunction 오브젝트를 사용할 수 있습니다. 사용자 정의 테이블 함수(UDTF) 만들기 섹션을 참조하십시오.

  2. session.tableFunction 을 호출하여 TableFunction 오브젝트와 입력 인자 이름 및 값의 Map 을 전달합니다.

table?Function 은 테이블 함수의 출력을 포함하는 DataFrame을 반환합니다.

예를 들어 다음 명령을 실행하여 SQL UDTF를 생성했다고 가정합니다.

CREATE OR REPLACE FUNCTION product_by_category_id(cat_id INT)
  RETURNS TABLE(id INT, name VARCHAR)
  AS
  $$
    SELECT id, name
      FROM sample_product_data
      WHERE category_id = cat_id
  $$
  ;
Copy

다음 코드는 이 UDTF를 호출하고, UDTF의 출력을 위한 DataFrame을 생성합니다. 이 예에서는 콘솔에 출력의 처음 10개 행을 출력합니다.

val dfTableFunctionOutput = session.tableFunction(TableFunction("product_by_category_id"), Map("cat_id" -> lit(10)))
dfTableFunctionOutput.show()
Copy

테이블 함수의 출력을 DataFrame과 조인해야 하는 경우, TableFunction을 전달하는 DataFrame.join 메서드 를 호출합니다.

저장 프로시저 호출

저장 프로시저를 호출하려면 Session 클래스의 sql 메서드를 사용하십시오. SQL 문 실행하기 섹션을 참조하십시오.