Snowpark 프로젝트 정의 만들기

snowflake.yml 파일에는 Snowpark 프로젝트에 대한 함수와 프로시저 선언이 포함되어 있습니다.

참고

현재 Snowpark 프로젝트 정의 파일의 이름은 snowflake.yml 로 명명되어야 합니다.

다음 스니펫은 두 개의 함수와 두 개의 프로시저를 포함하는 Snowpark 프로젝트 정의 파일의 샘플을 보여줍니다. hello_function 함수는 Snowpark의 외부 함수를 사용합니다.

definition_version: '2'

mixins:
  snowpark_shared:
    artifacts:
      - dest: my_snowpark_project
        src: app/
    stage: dev_deployment

entities:

  hello_function:
    type: function
    identifier:
      name: hello_function
    handler: functions.hello_function
    signature:
      - name: name
        type: string
    returns: string
    external_access_integrations:
      - my_external_access
    secrets:
        cred: my_cred_name
    meta:
      use_mixins:
        - snowpark_shared

  hello_procedure:
    type: procedure
    identifier:
      name: hello_procedure
    handler: procedures.hello_procedure
    signature:
      - name: name
        type: string
    returns: string
    meta:
      use_mixins:
        - snowpark_shared

  test_procedure:
    type: procedure
    identifier:
      name: test_procedure
    handler: procedures.test_procedure
    signature: ''
    returns: string
    meta:
      use_mixins:
        - snowpark_shared
Copy

조심

프로젝트 디렉터리 내의 파일은 Snowflake CLI 에 의해 처리되며 다른 snow snowpark 명령을 실행할 때 Snowflake에 업로드될 수 있습니다. 프로젝트 디렉터리의 파일에 민감한 정보를 포함하는 경우에는 주의해야 합니다.

함수 및 프로시저 오브젝트 속성

다음 테이블에서는 함수와 프로시저에서 사용하는 속성을 설명합니다.

함수 및 프로시저 오브젝트 속성

속성

정의

식별자

선택 사항, 문자열

엔터티에 대한 선택적 Snowflake 식별자입니다. 값은 다음 형식일 수 있습니다.

  • 문자열 식별자 텍스트

    identifier: my-snowpark-id
    
    Copy

    따옴표로 묶지 않은 식별자와 따옴표로 묶은 식별자가 모두 지원됩니다. 따옴표로 묶인 식별자를 사용하려면 YAML 값에 따옴표(예: ’”My Snowpark Function”’)를 포함합니다.

  • 오브젝트

    identifier:
      name: my-snowpark-id
      schema: my-schema # optional
      database: my-db # optional
    
    Copy

    참고

    schema 또는 database 를 지정하고 name 속성에 정규화된 이름(예: mydb.schema1.my-app)을 사용하면 오류가 발생합니다.

유형

선택 사항, 문자열

반드시 function 또는 procedure 중 하나여야 합니다.

artifact_repository

선택 사항, 문자열

아티팩트 리포지토리의 이름입니다. Snowflake에는 Snowpark UDF 및 프로시저 내에서 PyPI 패키지를 연결하고 설치하는 데 사용하는 snowflake.snowpark.pypi_shared_repository 라는 기본 아티팩트 리포지토리가 있습니다. 자세한 내용은 아티팩트 리포지토리 개요 섹션을 참조하십시오.

artifact_repository_packages

선택 사항, 문자열

아티팩트 리포지토리에서 가져올 패키지의 이름입니다. requirements.txt 파일의 패키지는 이 매개 변수에 나열되어 있더라도 여전히 처리 및 다운로드됩니다. 자세한 내용은 아티팩트 리포지토리 개요 섹션을 참조하십시오.

artifact_repositoryartifact_repository_packages 매개 변수를 사용하면 다음과 유사하게 Anaconda 이외의 패키지를 사용할 수 있습니다.

  • 프로젝트의 app.py 파일에서 다음과 같은 함수를 정의할 수 있습니다.

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import RandomForestClassifier
    
    def udf():
      X, y = load_iris(return_X_y=True)
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
    
      model = RandomForestClassifier()
      model.fit(X_train, y_train)
      return model.score(X_test, y_test)
    
    Copy
  • snowflake.yml 파일에서 다음과 같이 정의합니다.

    test_function:
      type: "function"
      handler: "app.udf"
      identifier:
        name: "udf"
      stage: "dev_deployment"
      signature: ""
      returns: float
      artifact_repository: snowflake.snowpark.pypi_shared_repository
      artifact_repository_packages:
        - 'scikit-learn'
      artifacts:
        - "app.py"
    
    Copy

특정 아키텍처에 종속성이 있는 패키지의 경우 다음과 같이 resource_constraint 매개 변수에서 정의할 수 있습니다.

test_function:
  type: "function"
  handler: "app.udf"
  identifier:
    name: "udf"
  stage: "dev_deployment"
  signature: ""
  returns: float
  artifact_repository: snowflake.snowpark.pypi_shared_repository
  artifact_repository_packages:
    - 'scikit-learn'
  artifacts:
    - "app.py"
  resource_constraint:
    architecture: 'x86'
Copy

자세한 내용은 x86 전용으로 빌드된 패키지 섹션을 참조하십시오.

아티팩트

필수, 문자열 시퀀스

배포 루트에 추가할 파일 소스 및 대상 쌍 목록입니다. 다음 아티팩트 속성을 사용할 수 있습니다.

  • src: 코드 소스 파일 또는 파일의 경로입니다.

  • dest: 아티팩트를 배포할 디렉터리의 경로입니다.

    디렉터리를 참조하는 대상 경로는 / 로 끝나야 합니다. GLOB 패턴의 대상이 / 로 끝나지 않으면 오류가 발생합니다. 생략하면, dest 는 기본적으로 src 와 동일한 문자열로 설정됩니다.

    참고

    Snowpark snowflake.yml 파일에서 glob 패턴을 사용하려면 ENABLE_SNOWPARK_GLOB_SUPPORT 기능 플래그를 활성화해야 합니다.

    dict 대신 각 항목에 대한 문자열을 전달할 수도 있으며, 이 경우 해당 값은 srcdest 로 모두 처리됩니다.

src 가 1개의 파일(GLOB가 아닌)만 참조하는 경우, dest 는 대상 <경로> 또는 <경로/이름> 을 참조할 수 있습니다.

dict 대신 각 항목에 대한 문자열을 전달할 수도 있으며, 이 경우 해당 값은 srcdest 로 모두 처리됩니다.

핸들러

필수, 문자열

snowpark.src 에 정의된 모듈 내부의 오브젝트에 대한 함수 또는 프로시저의 구현입니다. 예를 들어, functions.hello_function<src>/functions.py 파일의 hello_function 함수를 참조합니다.

반환

필수, 문자열

결과의 SQL 유형입니다. 사용 가능한 유형 의 목록 확인합니다.

서명

필수, 시퀀스

signature 매개 변수는 오브젝트에 전달되는 연속된 인자를 설명합니다. 각각의 이름과 유형을 지정해야 합니다. 예:

signature:
  - name: "first_argument"
    type: int
  - name: "second_argument"
    default: "default value"
    type: string
Copy

함수나 프로시저에 인자를 받지 않는 경우 이 값을 빈 문자열(signature: "")로 설정합니다.

사용 가능한 유형 열의 SQL 유형 을 확인합니다. 명명된 인자와 선택적 인자의 구문에 대해 자세히 알아보려면 선택적 인자가 있는 UDF 호출하기 섹션을 참조하십시오.

런타임

선택 사항, 문자열

프로시저나 함수를 실행할 때 사용할 Python 버전입니다. 기본값: “3.9”.

external_access_integrations

선택 사항, 문자열 시퀀스

이 절차의 핸들러 코드가 외부 네트워크에 액세스하는 데 필요한 외부 액세스 통합 의 이름입니다. 자세한 내용은 CREATE PROCEDURE 의 EXTERNAL_ACCESS_INTEGRATIONS 매개 변수 를 참조하십시오.

시크릿

선택 사항, 사전

처리기 코드의 시크릿에서 정보를 검색할 때 변수를 사용하여 시크릿을 참조할 수 있도록 시크릿 이름을 변수에 할당합니다. 자세한 내용은 CREATE PROCEDURE <label-create_procedure_python_secrets> SECRETS 매개 변수 를 참조하십시오.

가져오기

선택 사항, 문자열 시퀀스

가져올 이전에 업로드한 파일의 스테이지와 경로를 입력합니다. 자세한 내용은 CREATE PROCEDURE <label-create_procedure_python_imports> IMPORT 매개 변수 를 참조하십시오.

execute_as_caller

선택 사항, bool

프로시저에만 사용 가능 프로시저가 소유자(사용자)의 권한으로 실행되는지, 아니면 호출자의 권한으로 실행되는지 확인합니다. 기본값: False(소유자 권한).