Criação de uma definição de projeto Snowpark

O arquivo snowflake.yml contém as declarações de funções e procedimentos para um projeto Snowpark.

Nota

Atualmente, o arquivo de definição do projeto Snowpark deve ser nomeado snowflake.yml.

O snippet a seguir mostra um arquivo de definição de projeto Snowpark de exemplo: com duas funções e dois procedimentos. A função hello_function usa recursos externos do 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

Cuidado

Os arquivos dentro de um diretório de projeto são processados por Snowflake CLI e podem ser carregados no Snowflake ao executar outros comandos snow snowpark. Você deve ter cuidado ao colocar qualquer informação confidencial dentro de arquivos em um diretório de projeto.

Propriedades de objetos de função e procedimento

A tabela a seguir descreve as propriedades usadas por funções e procedimentos.

Propriedades de objetos de função e procedimento

Propriedade

Definição

identifier

optional, string

Identificador Snowflake opcional para a entidade. O valor pode ter as seguintes formas:

  • Texto identificador de cadeia de caracteres

    identifier: my-snowpark-id
    
    Copy

    Identificadores entre aspas e sem aspas são suportados. Para usar identificadores entre aspas, inclua as aspas ao redor no valor YAML (por exemplo, ‘“Minha função Snowpark”’).

  • Objeto

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

    Nota

    Ocorrerá um erro se você especificar um schema ou database e usar um nome totalmente qualificado na propriedade name (como mydb.schema1.my-app).

type

optional, string

Deve ser um dos seguintes: function ou procedure.

artifact_repository

optional, string

Nome do repositório de artefatos. O Snowflake tem um repositório de artefatos padrão chamado snowflake.snowpark.pypi_shared_repository que você usa para conectar e instalar pacotes PyPI em UDFs e procedimentos do Snowpark. Para obter mais informações, consulte Visão geral do repositório de artefatos.

artifact_repository_packages

optional, string

Nomes dos pacotes que viriam do repositório de artefatos. Observe que os pacotes no arquivo requirements.txt ainda são processados e baixados, mesmo que estejam listados nesse parâmetro. Para obter mais informações, consulte Visão geral do repositório de artefatos.

Os parâmetros artifact_repository e artifact_repository_packages permitem que você use pacotes que não sejam do Anaconda, de forma semelhante à seguinte:

  • No arquivo app.py do projeto, você pode definir uma função como a seguinte:

    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
  • No arquivo snowflake.yml, você o definiria da seguinte forma:

    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

Para pacotes que dependem de arquiteturas específicas, você pode defini-los no parâmetro resource_constraint da seguinte forma:

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

Para obter mais informações, consulte Pacotes criados somente para x86.

artifacts

obrigatório, sequência de cadeias de caracteres

Lista de pares de origem e destino de arquivos para adicionar à raiz de implantação. É possível usar as seguintes propriedades de artefato:

  • src: Caminho para o arquivo ou arquivos de origem do código

  • dest: Caminho para o diretório para implementar os artefatos.

    Os caminhos de destino que fazem referência a diretórios devem terminar com um /. O destino de um padrão glob que não termina com um / resulta em um erro. Se omitido, dest tem como padrão a mesma cadeia de caracteres que src.

    Nota

    O uso de padrões glob em arquivos do Snowpark snowflake.yml requer a ativação do sinalizador de recurso ENABLE_SNOWPARK_GLOB_SUPPORT.

    Você também pode passar uma cadeia de caracteres para cada item em vez de um dict; nesse caso o valor será tratado como src e dest.

Se src refere-se a apenas um arquivo (não um glob), dest pode se referir a um <caminho de destino> ou um <caminho/nome>.

Você também pode passar uma cadeia de caracteres para cada item em vez de um dict, caso em que o valor é tratado como ambos src e dest.

manipulador

required, string

Implementação da função ou procedimento do objeto dentro do módulo definido em snowpark.src. Por exemplo functions.hello_function refere-se à função hello_function do arquivo <src>/functions.py.

retorna

required, string

Tipo SQL do resultado. Confira a lista de tipos disponíveis.

assinatura

obrigatório, sequência

O parâmetro signature descreve argumentos consecutivos passados ao objeto. Cada um deve especificar seu nome e tipo, por exemplo:

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

Se uma função ou procedimento não aceitar argumentos, defina este valor como uma cadeia de caracteres vazia (signature: "").

Verifique a coluna Tipo de SQL de tipos disponíveis. Para saber mais sobre a sintaxe de argumentos nomeados e opcionais, consulte Como chamar uma UDF que tem argumentos opcionais.

tempo de execução

optional, string

Versão do Python a ser usada ao executar o procedimento ou função. Padrão: «3.9».

external_access_integrations

opcional, sequência de cadeias de caracteres

Nomes das integrações de acesso externo para que este código do manipulador do procedimento acesse redes externas. Consulte o parâmetro EXTERNAL_ACCESS_INTEGRATIONS em CREATE PROCEDURE para obter mais detalhes.

segredos

opcional, dicionário

Atribui os nomes dos segredos às variáveis para que você possa usar as variáveis para fazer referência aos segredos ao recuperar informações dos segredos no código do manipulador. Consulte o parâmetro SECRETS em CREATE PROCEDURE <label-create_procedure_python_secrets> para obter mais detalhes.

importações

opcional, sequência de cadeias de caracteres

Estágio e caminho para os arquivos enviados anteriormente que você deseja importar. Consulte o parâmetro IMPORT em CREATE PROCEDURE <label-create_procedure_python_imports> para obter mais detalhes.

execute_as_caller

opcional, booliano

Disponível apenas para procedimentos. Determine se o procedimento é executado com os privilégios do proprietário (você) ou com os privilégios do chamador. Padrão: falso (privilégios do proprietário).