Disponibilização das dependências para seus códigos

Quando sua função definida pelo usuário (UDF) ou procedimento armazenado depende de código ou arquivos que são externos à UDF ou ao procedimento, você pode disponibilizar a dependência para a UDF ou procedimento carregando-o para um estágio, e depois referenciando-o naquele local.

Por exemplo, você pode querer que sua UDF ou procedimento tenha acesso ao seguinte:

  • Código do manipulador Python em um módulo.

  • Código do manipulador Java ou Scala compilado e empacotado em um JAR.

  • Código de dependência escrito em Java, Python ou Scala.

  • Arquivos a serem lidos pelo código do manipulador e cujo nome e localização são conhecidos quando você cria a UDF. Isso pode ser útil com arquivos de configuração, por exemplo.

Nota

Você também pode usar a cláusula PACKAGES de CREATE FUNCTION ou CREATE PROCEDURE para importar bibliotecas que estão incluídas no Snowflake.

Neste tópico:

Etapas de alto nível

Siga estas etapas para tornar as dependências disponíveis para sua função ou procedimento.

  1. Escolha ou crie um estágio que esteja disponível para seu manipulador.

  2. Carregue a dependência no estágio.

  3. Referenciar a dependência com IMPORTS quando se cria a função ou procedimento.

Escolha ou criação de um estágio para os arquivos de dependência

Para disponibilizar seu arquivo de dependência para uma função ou procedimento, você precisará copiar o arquivo de dependência em um estágio em que ele possa ser alcançado em tempo de execução. O proprietário da função ou procedimento deve ter o privilégio READ para o estágio.

Normalmente, você carrega a dependência em um estágio interno nomeado usando o comando PUT. Para saber mais sobre a criação de estágios, consulte CREATE STAGE.

Nota

Você não pode executar o comando PUT pelo Snowflake GUI; você pode usar o SnowSQL para executar PUT. Para um exemplo do comando PUT para copiar um arquivo .jar em um estágio, consulte Carregamento da dependência no estágio neste tópico.

Escolha ou crie um dos seguintes tipos de estágio para sua dependência:

  • Um estágio interno de usuário ou nomeado.

    Se você planeja usar o comando PUT para carregar os arquivos, use um estágio interno nomeado. Para saber mais sobre a escolha de um tipo de estágio interno, consulte Escolha de um estágio interno para os arquivos locais.

  • Um estágio externo.

    Os estágios externos são locais associados a serviços de armazenamento externo, como descrito em CREATE STAGE. O comando PUT não oferece suporte ao carregamento de arquivos para estágios externos.

Você pode usar um estágio existente ou pode criar um novo estágio executando CREATE STAGE. Por exemplo, o seguinte comando cria um novo estágio interno nomeado mystage:

CREATE STAGE mystage;
Copy

Nota

Atualmente, o Snowflake não oferece suporte ao uso de um estágio da tabela para armazenar o código do manipulador.

Carregamento da dependência no estágio

Carregue os arquivos necessários para seu procedimento armazenado em um estágio.

Se você estiver usando um estágio externo, use os meios desse serviço de armazenamento para carregar os arquivos. Se você tiver usando um estágio interno, poderá copiar o arquivo de um drive local para o estágio usando o comando PUT. Para obter uma referência do comando, consulte PUT. Para obter mais informações sobre a preparação de arquivos com PUT, consulte Preparação de arquivos de dados de um sistema de arquivo local.

Use o comando PUT para carregar os arquivos no estágio.

O código no seguinte exemplo carrega myjar.jar em um estágio chamado mystage, substituindo um arquivo existente com o mesmo nome, se ele existir.

PUT file:///Users/MyUserName/MyCompiledJavaCode.jar
  @mystage
  AUTO_COMPRESS = FALSE
  OVERWRITE = TRUE
  ;
Copy

Nota

Se você omitir AUTO_COMPRESS = FALSE, o comando PUT comprime automaticamente o arquivo. O nome do arquivo comprimido no estágio será myjar.jar.gz. Depois, ao executar um comando como CREATE PROCEDURE, você precisará especificar o nome do arquivo com essa extensão .gz na cláusula IMPORTS do comando.

Nota

O comando PUT não oferece suporte ao carregamento de arquivos para estágios externos. Para carregar arquivos para estágios externos, use os utilitários fornecidos pelo serviço de nuvem.

Referência à dependência

Para tornar uma função ou procedimento que você está criando ciente da localização da dependência, especifique a localização da dependência na cláusula IMPORTS do SQL que você usa para criar a função ou procedimento.

Se você tiver vários arquivos de dependência, como quando você tem bibliotecas de terceiros das quais depende um manipulador, você pode especificar a localização do estágio e o caminho e nome de todos os arquivos de dependência como valores da cláusula IMPORTS.

O código no exemplo a seguir cria um procedimento chamado MYPROC, especificando que o arquivo MyCompiledJavaCode.jar (no estágio mystage) deve ser incluído no ambiente de execução do procedimento. Neste caso, MyCompiledJavaCode.jar contém o manipulador do procedimento – o código compilado para MyJavaClass.run.

CREATE OR REPLACE PROCEDURE MYPROC(value INT, fromTable STRING, toTable STRING, count INT)
  RETURNS INT
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:latest')
  IMPORTS = ('@mystage/MyCompiledJavaCode.jar')
  HANDLER = 'MyJavaClass.run';
Copy