packages

packages (Python 패키지)

Python UDF를 만들 때 packages 설정으로 공개 서드파티 PyPI 패키지를 지정할 수 있어요. 패키지 이름(예: numpy, pandas)을 나열하거나 버전을 고정(예: pandas==1.5.0)할 수 있어요. dbt v1.12 또는 dbt "v1 Latest" 릴리스 트랙에서 사용할 수 있어요.

출처: dbt 공식 문서

본문

설정 방법

functions/.yml

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):
    ...
'''

더 알아보기 (Learn more)