Snowpark Python에서 함수 및 저장 프로시저 호출하기¶
DataFrame에서 데이터를 처리하기 위해 시스템 정의 SQL 함수, 사용자 정의 함수, 저장 프로시저를 호출할 수 있습니다. 이 항목에서는 Snowpark에서 이를 호출하는 방법에 대해 설명합니다.
이 항목의 내용:
DataFrame에서 데이터를 처리하기 위해 시스템 정의 SQL 함수, 사용자 정의 함수, 저장 프로시저를 호출할 수 있습니다.
시스템 정의 함수 호출하기¶
시스템 정의 SQL 함수 를 호출해야 하는 경우, snowflake.snowpark.functions
모듈에서 이와 동일한 함수를 사용하십시오.
다음 예에서는 functions
모듈의 upper
함수(시스템 정의 UPPER 함수와 동일)를 호출하여 대문자로 된 sample_product_data 테이블의 이름 열에 있는 값을 반환합니다.
>>> # Import the upper function from the functions module.
>>> from snowflake.snowpark.functions import upper, col
>>> session.table("sample_product_data").select(upper(col("name")).alias("upper_name")).collect()
[Row(UPPER_NAME='PRODUCT 1'), Row(UPPER_NAME='PRODUCT 1A'), Row(UPPER_NAME='PRODUCT 1B'), Row(UPPER_NAME='PRODUCT 2'), Row(UPPER_NAME='PRODUCT 2A'), Row(UPPER_NAME='PRODUCT 2B'), Row(UPPER_NAME='PRODUCT 3'), Row(UPPER_NAME='PRODUCT 3A'), Row(UPPER_NAME='PRODUCT 3B'), Row(UPPER_NAME='PRODUCT 4'), Row(UPPER_NAME='PRODUCT 4A'), Row(UPPER_NAME='PRODUCT 4B')]
함수 모듈에서 시스템 정의 SQL 함수를 사용할 수 없는 경우, 다음 접근 방식 중 하나를 사용할 수 있습니다.
call_function
함수를 사용하여 시스템 정의 함수를 호출합니다.function
함수를 사용하여 시스템 정의 함수를 호출하는 데 사용할 수 있는 함수 오브젝트를 만듭니다.
call_function
및 function
은 snowflake.snowpark.functions
모듈에 정의되어 있습니다.
call_function
의 경우, 시스템 정의 함수의 이름을 첫 번째 인자로 전달합니다. 열 값을 시스템 정의 함수에 전달해야 하는 경우, Column 오브젝트를 정의하고 call_function
함수에 대한 추가 인자로서 전달하십시오.
다음 예에서는 시스템 정의 함수 RADIANS 를 호출하여 col1
열의 값을 전달합니다.
>>> # Import the call_function function from the functions module.
>>> from snowflake.snowpark.functions import call_function
>>> df = session.create_dataframe([[1, 2], [3, 4]], schema=["col1", "col2"])
>>> # Call the system-defined function RADIANS() on col1.
>>> df.select(call_function("radians", col("col1"))).collect()
[Row(RADIANS("COL1")=0.017453292519943295), Row(RADIANS("COL1")=0.05235987755982988)]
call_function
함수는 DataFrame 변환 메서드 (예: filter
, select
등)에 전달할 수 있는 Column
을 반환합니다.
function
의 경우, 시스템 정의 함수의 이름을 전달하고, 반환된 함수 오브젝트를 사용하여 시스템 정의 함수를 호출합니다. 예:
>>> # Import the call_function function from the functions module.
>>> from snowflake.snowpark.functions import function
>>> # Create a function object for the system-defined function RADIANS().
>>> radians = function("radians")
>>> df = session.create_dataframe([[1, 2], [3, 4]], schema=["col1", "col2"])
>>> # Call the system-defined function RADIANS() on col1.
>>> df.select(radians(col("col1"))).collect()
[Row(RADIANS("COL1")=0.017453292519943295), Row(RADIANS("COL1")=0.05235987755982988)]
사용자 정의 함수(UDF) 호출하기¶
이름으로 등록한 UDF, 그리고 CREATEFUNCTION 을 실행하여 만든 UDF를 호출하려면 snowflake.snowpark.functions
모듈에서 call_udf
함수를 사용하십시오. UDF의 이름을 첫 번째 인자로서 전달하고 모든 UDF 매개 변수를 추가 인자로서 전달하십시오.
다음 예에서는 UDF 함수 minus_one
을 호출하여 col1
및 col2
열의 값을 전달합니다. 이 예에서는 minus_one
의 반환 값을 DataFrame의 select
메서드로 전달합니다.
>>> # Import the call_udf function from the functions module.
>>> from snowflake.snowpark.functions import call_udf
>>> # Runs the scalar function 'minus_one' on col1 of df.
>>> df = session.create_dataframe([[1, 2], [3, 4]], schema=["col1", "col2"])
>>> df.select(call_udf("minus_one", col("col1"))).collect()
[Row(MINUS_ONE("COL1")=0), Row(MINUS_ONE("COL1")=2)]
사용자 정의 테이블 함수(UDTF) 호출하기¶
이름으로 등록한 UDTF와 CREATE FUNCTION을 실행하여 만든 UDTF를 호출하려면 아래 나열된 함수 중 하나를 사용하십시오. 둘 다 지연 평가된 관계형 데이터 세트를 나타내는 DataFrame
을 반환합니다.
이 두 가지 UDTF를 사용하여 시스템 정의 테이블 함수 를 비롯한 다른 테이블 함수도 호출할 수 있습니다.
UDTF 등록에 대한 자세한 내용은 UDTF 등록하기 섹션을 참조하십시오.
측면 조인을 지정하지 않고 UDTF를 호출하려면
snowflake.snowpark.Session
클래스에서table_function
함수를 호출하십시오.함수 참조와 예제는 Session.table_function 을 참조하십시오.
다음 예제의 코드는
table_function
을 사용하여udtf
함수로 등록된generator_udtf
함수를 호출합니다.>>> from snowflake.snowpark.types import IntegerType, StructField, StructType >>> from snowflake.snowpark.functions import udtf, lit >>> class GeneratorUDTF: ... def process(self, n): ... for i in range(n): ... yield (i, ) >>> generator_udtf = udtf(GeneratorUDTF, output_schema=StructType([StructField("number", IntegerType())]), input_types=[IntegerType()]) >>> session.table_function(generator_udtf(lit(3))).collect() [Row(NUMBER=0), Row(NUMBER=1), Row(NUMBER=2)]
호출에서 측면 조인을 지정하는 UDTF를 호출하려면
snowflake.snowpark.DataFrame
클래스에서join_table_function
함수를 사용하십시오.UDTF를 측면 조인할 때 PARTITION BY 및 ORDER BY 절을 지정할 수 있습니다.
함수 참조와 예제는 DataFrame.join_table_function 을 참조하십시오.
다음 예제의 코드는 측면 조인을 수행하여
partition_by
및order_by
매개 변수를 지정합니다. 이 예제의 코드는 먼저snowflake.snowpark.functions.table_function
함수를 호출하여 시스템 정의SPLIT_TO_TABLE
함수를 나타내는 함수 오브젝트를 만듭니다. 그런 다음join_table_function
이 호출하는 것은 이 함수 오브젝트입니다.snowflake.snowpark.functions.table_function
함수 참조는 table_function 을 참조하십시오.SPLIT_TO_TABLE
함수 참조는 SPLIT_TO_TABLE 섹션을 참조하십시오.>>> from snowflake.snowpark.functions import table_function >>> split_to_table = table_function("split_to_table") >>> df = session.create_dataframe([ ... ["John", "James", "address1 address2 address3"], ... ["Mike", "James", "address4 address5 address6"], ... ["Cathy", "Stone", "address4 address5 address6"], ... ], ... schema=["first_name", "last_name", "addresses"]) >>> df.join_table_function(split_to_table(df["addresses"], lit(" ")).over(partition_by="last_name", order_by="first_name")).show() ---------------------------------------------------------------------------------------- |"FIRST_NAME" |"LAST_NAME" |"ADDRESSES" |"SEQ" |"INDEX" |"VALUE" | ---------------------------------------------------------------------------------------- |John |James |address1 address2 address3 |1 |1 |address1 | |John |James |address1 address2 address3 |1 |2 |address2 | |John |James |address1 address2 address3 |1 |3 |address3 | |Mike |James |address4 address5 address6 |2 |1 |address4 | |Mike |James |address4 address5 address6 |2 |2 |address5 | |Mike |James |address4 address5 address6 |2 |3 |address6 | |Cathy |Stone |address4 address5 address6 |3 |1 |address4 | |Cathy |Stone |address4 address5 address6 |3 |2 |address5 | |Cathy |Stone |address4 address5 address6 |3 |3 |address6 | ----------------------------------------------------------------------------------------
저장 프로시저 호출¶
저장 프로시저를 호출하려면 Session
클래스의 호출 메서드를 사용하십시오.
>>> session.call("your_proc_name", 1)
0