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()
함수 오브젝트에서 시스템 정의 SQL 함수를 사용할 수 없는 경우, 다음 접근 방식 중 하나를 사용할 수 있습니다.
callBuiltin
함수를 사용하여 시스템 정의 함수를 호출합니다.builtin
함수를 사용하여 시스템 정의 함수를 호출하는 데 사용할 수 있는 함수 오브젝트를 만듭니다.
callBuiltin
및 builtin
은 com.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()
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()
스칼라 사용자 정의 함수(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
을 호출하여 col1
및 col2
열의 값을 전달합니다. 이 예에서는 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()
테이블 함수 호출(시스템 함수 및 UDTF)¶
테이블 함수 또는 사용자 정의 테이블 함수(UDTF) 를 호출하려면 다음을 수행합니다.
테이블 함수의 이름을 전달하여 TableFunction 오브젝트를 생성합니다.
Snowpark에서 UDTF를 만드는 경우, 단순히
UDTFRegistration.registerTemporary
또는UDTFRegistration.registerPermanent
메서드에 의해 반환된TableFunction
오브젝트를 사용할 수 있습니다. 사용자 정의 테이블 함수(UDTF) 만들기 섹션을 참조하십시오.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
$$
;
다음 코드는 이 UDTF를 호출하고, UDTF의 출력을 위한 DataFrame을 생성합니다. 이 예에서는 콘솔에 출력의 처음 10개 행을 출력합니다.
val dfTableFunctionOutput = session.tableFunction(TableFunction("product_by_category_id"), Map("cat_id" -> lit(10)))
dfTableFunctionOutput.show()
테이블 함수의 출력을 DataFrame과 조인해야 하는 경우, TableFunction을 전달하는 DataFrame.join 메서드 를 호출합니다.
저장 프로시저 호출¶
저장 프로시저를 호출하려면 Session
클래스의 sql
메서드를 사용하십시오. SQL 문 실행하기 섹션을 참조하십시오.