Python 저장 프로시저에서 테이블 형식 데이터 반환하기¶
테이블 형식으로 데이터를 반환하는 프로시저를 작성할 수 있습니다. 테이블 형식 데이터를 반환하는 프로시저를 작성하려면 다음을 수행하십시오.
CREATE PROCEDURE 문에서 프로시저의 반환 유형으로
TABLE(...)
을 지정합니다.반환된 데이터의 열 이름과 유형 을 알고 있는 경우 이들을 TABLE 매개 변수로 지정할 수 있습니다. 프로시저를 정의할 때 반환된 열을 모르는 경우(예: 런타임에 지정된 경우) TABLE 매개 변수를 생략할 수 있습니다. 그렇게 하면 프로시저의 반환 값 열이 해당 처리기에서 반환된
DataFrame
의 열에서 변환됩니다. 열 데이터 타입은 SQL-Python 데이터 타입 매핑 에 지정된 매핑에 따라 SQL로 변환됩니다.Snowpark DataFrame에서 테이블 형식 결과를 반환하도록 처리기를 작성합니다.
데이터 프레임에 대한 자세한 내용은 Snowpark Python에서 DataFrame으로 작업하기 섹션을 참조하십시오.
예¶
이 섹션의 예에서는 열이 문자열과 일치하는 행을 필터링하는 프로시저에서 테이블 형식 값을 반환하는 방법을 보여줍니다.
데이터 정의하기¶
다음은 직원 테이블을 생성하는 코드 예제입니다.
CREATE OR REPLACE TABLE employees(id NUMBER, name VARCHAR, role VARCHAR);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'op'), (2, 'Bob', 'dev'), (3, 'Cindy', 'dev');
반환 열 이름 및 유형 지정하기¶
이 예에서는 RETURNS TABLE()
문에 열 이름과 유형을 지정합니다.
CREATE OR REPLACE PROCEDURE filterByRole(tableName VARCHAR, role VARCHAR)
RETURNS TABLE(id NUMBER, name VARCHAR, role VARCHAR)
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'filter_by_role'
AS
$$
from snowflake.snowpark.functions import col
def filter_by_role(session, table_name, role):
df = session.table(table_name)
return df.filter(col("role") == role)
$$;
반환 열 이름 및 유형 생략하기¶
다음 예제의 코드에서는 처리기의 반환 값에 있는 열에서 반환 값 열 이름 및 유형을 추정할 수 있도록 하는 프로시저를 선언합니다. 이 코드는 RETURNS TABLE()
문에서 열 이름과 유형을 생략합니다.
CREATE OR REPLACE PROCEDURE filterByRole(tableName VARCHAR, role VARCHAR)
RETURNS TABLE()
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'filter_by_role'
AS
$$
from snowflake.snowpark.functions import col
def filter_by_role(session, table_name, role):
df = session.table(table_name)
return df.filter(col("role") == role)
$$;
프로시저 호출하기¶
다음 예에서는 저장 프로시저를 호출합니다.
CALL filterByRole('employees', 'dev');
프로시저를 호출하면 다음 출력이 생성됩니다.
+----+-------+------+
| ID | NAME | ROLE |
+----+-------+------+
| 2 | Bob | dev |
| 3 | Cindy | dev |
+----+-------+------+