packages
packages (Python 패키지)
Python UDF를 만들 때 packages 설정으로 공개 서드파티 PyPI 패키지를 지정할 수 있어요. 패키지 이름(예: numpy, pandas)을 나열하거나 버전을 고정(예: pandas==1.5.0)할 수 있어요. dbt v1.12 또는 dbt "v1 Latest" 릴리스 트랙에서 사용할 수 있어요.
출처: dbt 공식 문서
본문
설정 방법
functions/
functions:
- name: <function name>
config:
packages: [<string>] # optional, Python UDFs only
정의
Python UDF를 만들 때 선택적 packages 설정으로 공개 서드파티 PyPI 패키지를 지정할 수 있어요. 패키지 이름(예: numpy, pandas)을 나열하고 버전을 고정(예: pandas==1.5.0)할 수 있어요. 웨어하우스는 UDF를 만들 때 이 패키지를 설치하므로, UDF에서 외부 Python 라이브러리의 기능을 쓸 수 있어요.
Snowflake에서는 일부 패키지가 Anaconda 저장소에서 설치되는데, Anaconda의 서비스 약관에 동의해야 사용할 수 있을 수 있어요.
Python UDF는 현재 Snowflake와 BigQuery에서 지원돼요. 각 웨어하우스는 패키지를 지정하는 메커니즘이 달라요. 예를 들어:
Snowflake
functions/schema.yml
functions:
- name: is_positive_int
description: Returns 1 if a_string matches ^[0-9]+$, else 0
config:
runtime_version: "3.11"
entry_point: main
packages:
- numpy
- pandas==1.5.0
arguments:
- name: a_string
data_type: string
returns:
data_type: integer
컴파일된 SQL:
CREATE OR REPLACE FUNCTION my_schema.is_positive_int(a_string STRING)
RETURNS INTEGER
LANGUAGE PYTHON
RUNTIME_VERSION = '3.11'
HANDLER = 'main'
PACKAGES = ('numpy','pandas==1.5.0')
AS $$
def main(a_string):
...
$$
BigQuery
functions/schema.yml
functions:
- name: is_positive_int
description: Returns 1 if a_string matches ^[0-9]+$, else 0
config:
runtime_version: "3.11"
entry_point: main
packages:
- numpy
- pandas==1.5.0
arguments:
- name: a_string
data_type: string
returns:
data_type: integer
컴파일된 SQL:
CREATE OR REPLACE FUNCTION my_dataset.is_positive_int(a_string STRING)
RETURNS INT64
LANGUAGE python
OPTIONS(
runtime_version = "python-3.11",
entry_point = "main",
packages = ['numpy', 'pandas==1.5.0']
)
AS r'''
def main(a_string):
...
'''