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 externos à UDF ou ao procedimento, é possível disponibilizar a dependência para a UDF ou procedimento a partir de um estágio, incluindo um estágio de repositório com um clone de um repositório Git remoto que o Snowflake está usando.

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 tornar seu arquivo de dependência disponível para uma função ou procedimento, o arquivo precisará estar em um estágio onde possa ser acessado em tempo de execução. O proprietário da função ou procedimento deve ter o privilégio READ para o estágio.

Para saber mais sobre a criação de estágios, consulte CREATE STAGE.

Você também pode definir o Snowflake para usar um repositório Git remoto, criando um estágio de repositório com um clone completo dos arquivos do repositório remoto.

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 de repositório com um clone de arquivos do repositório remoto.

    Para obter mais informações, consulte Uso de um repositório Git no Snowflake.

  • 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.

Se você ainda não tiver um estágio de usuário, um estágio interno nomeado ou um estágio externo, é possível criar um 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 seu manipulador for de um repositório Git que você está usando com o Snowflake, talvez seja necessário buscar as últimas informações de seu repositório remoto para o estágio do repositório do Snowflake.

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