Criação de um procedimento armazenado¶
Você pode criar um procedimento armazenado usando qualquer um dos vários métodos disponíveis no Snowflake. Esses métodos são descritos neste tópico.
Criação de um procedimento¶
Escreva a lógica do procedimento como um manipulador usando uma das várias linguagens compatíveis, incluindo Python, Java e Scala.
Escolha uma ferramenta ou API para criar o procedimento com o manipulador que você escreveu.
Para obter mais informações sobre cada um deles, consulte Ferramentas para criar procedimentos.
SQL
Use o SQL e escreva lógica em uma das várias linguagens.
Snowpark
Use a Snowpark API para Java, Python ou Scala.
Linha de comando
Execute os comandos do Snowflake CLI para criar o procedimento.
API de Python
Execute comandos Python no lado do cliente para criar o procedimento.
REST
Faça solicitações a um RESTful API para criar o procedimento.
Execute o procedimento usando uma das várias ferramentas, dependendo de suas necessidades.
Ferramentas para criar procedimentos¶
Você pode criar um procedimento usando qualquer um dos vários métodos disponíveis no Snowflake, dependendo da linguagem e do conjunto de habilidades que tiver disponível. Escolha a ferramenta certa para suas necessidades na tabela a seguir.
Linguagem |
Abordagem |
---|---|
SQL Execute um comando SQL, por exemplo, usando Snowsight. |
Execute o comando SQL CREATE PROCEDURE para criar um procedimento com código de manipulador escrito em uma das seguintes linguagens: |
Java, Python ou Scala Escreva o código em uma das linguagens compatíveis e, em seguida, execute o código localmente para realizar operações no Snowflake. |
Execute o código do cliente que usa as Snowpark APIs em um dos seguintes idiomas. |
Linha de comando Crie e gerencie entidades Snowflake executando comandos a partir da linha de comando. |
Execute comandos do Snowflake CLI. |
Python No cliente, escreva o código que executa operações de gerenciamento no Snowflake. |
Execute o código que usa a Snowflake Python API. |
RESTful APIs (independente da linguagem) Faça solicitações de pontos de extremidade RESTful para criar e gerenciar entidades Snowflake. |
Faça uma solicitação para criar um procedimento usando o Snowflake REST API. |
Principais propriedades¶
A seguir descrevemos algumas das propriedades necessárias ou tipicamente utilizadas na criação de um procedimento.
- Nome do procedimento:
O nome do procedimento não precisa corresponder ao nome do manipulador. Para saber mais sobre restrições de nome e convenções, consulte Como nomear e sobrecarregar procedimentos e UDFs.
- Argumentos:
Para obter mais informações sobre os requisitos, consulte Definição de argumentos para UDFs e procedimentos armazenados.
- Seu tipo de retorno:
Para obter mais informações sobre como o Snowflake mapeia tipos de dados SQL para os tipos de dados do manipulador, consulte Mapeamentos de tipos de dados entre linguagens do manipulador e SQL.
- Seu nome do manipulador:
Quando necessário, este é o nome da classe ou método que contém o código que executa quando o procedimento é chamado. Você precisa especificar um nome de manipulador somente para manipuladores escritos em Java, Python e Scala. Para manipuladores de JavaScript e Script Snowflake, todos os códigos inline especificados serão executados como manipuladores.
- Dependências:
Para um manipulador escrito em Java, Python ou Scala, talvez você também precise especificar a biblioteca do Snowpark, por exemplo, ao criar o procedimento.
Para saber mais sobre como disponibilizar dependências para seu manipulador, consulte Disponibilização das dependências para seus códigos.
- Tempo de execução da linguagem do manipulador:
Quando a linguagem do manipulador for Java, Python ou Scala, especifique a versão de tempo de execução para indicar qual versão de tempo de execução suportada deve ser usada. Lembre-se de que, se você usar a versão padrão, ela será alterada com o tempo.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
---|---|---|
CREATE PROCEDURE |
Esquema |
|
USAGE |
Procedimento |
Concedendo o privilégio USAGE no procedimento recém-criado a uma função permite que os usuários com essa função chamem o procedimento em outro lugar no Snowflake. |
USAGE |
Integração de acesso externo |
Necessário nas integrações, se houver, especificadas ao criar o procedimento. Para obter mais informações, consulte CREATE EXTERNAL ACCESS INTEGRATION. |
READ |
Segredo |
Necessário em segredos, se houver, especificados ao criar o procedimento. Para obter mais informações, consulte Criação de um segredo para representar credenciais e Uso da integração de acesso externo em uma função ou procedimento. |
USAGE |
Esquema |
Necessário nos esquemas que contêm segredos, se houver, especificados ao criar o procedimento. Para obter mais informações, consulte Criação de um segredo para representar credenciais e Uso da integração de acesso externo em uma função ou procedimento. |
O privilégio USAGE no banco de dados e no esquema pai é necessário para executar operações em qualquer objeto de um esquema.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
Todas as linguagens de manipuladores¶
Os procedimentos armazenados oferecem suporte à sobrecarga. Dois procedimentos podem ter o mesmo nome se eles tiverem um número diferente de parâmetros ou tipos de dados diferentes para seus parâmetros.
Os procedimentos armazenados não são atômicos; se uma instrução em um procedimento armazenado falhar, as outras instruções no procedimento armazenado não são necessariamente revertidas. Para obter mais informações sobre procedimentos armazenados e transações, consulte Gerenciamento de transações.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Dica
Se sua organização utiliza uma mistura de procedimentos armazenados de direitos do chamador e de direitos de proprietário, você pode querer usar uma convenção de nomes para seus procedimentos armazenados para indicar se um procedimento armazenado é um procedimento armazenado de direitos do chamador ou um de direitos do proprietário.
Java¶
Consulte as limitações conhecidas.
Javascript¶
Um procedimento armazenado em JavaScript pode retornar somente um único valor, como uma cadeia de caracteres (por exemplo, um indicador de sucesso/falha) ou um número (por exemplo, um código de erro). Se você precisar retornar informações mais extensas, você pode retornar um VARCHAR que contenha valores separados por um delimitador (como uma vírgula), ou um tipo de dados semiestruturados, como o VARIANT.
Python¶
Consulte as limitações conhecidas.
Scala¶
Consulte as limitações conhecidas.
Criação de um procedimento armazenado com SQL¶
Você pode criar um procedimento armazenado com SQL usando as seguintes etapas.
Nota
Você também pode criar e chamar um procedimento que não está armazenado para uso posterior. Muitas das propriedades para esse tipo de procedimento são as mesmas que para um procedimento armazenado. Para obter mais informações, consulte CALL (com procedimento anônimo).
Escreva o código do manipulador que executa quando o procedimento é chamado.
Você pode usar uma das linguagens do manipulador suportadas. Para obter mais informações, consulte Linguagens e ferramentas compatíveis.
Escolha se você vai manter o código do manipulador em linha com a instrução SQL CREATE PROCEDURE ou se vai se referir a ele em um estágio.
Cada um tem suas vantagens. Para obter mais informações, consulte Como manter o código do manipulador em linha ou em um estágio.
Execute uma instrução CREATE PROCEDURE em SQL, especificando as propriedades do procedimento.
O código no exemplo a seguir cria um procedimento chamado
myProc
com um manipulador inlineMyClass.myMethod
. A linguagem do manipulador é Java, que (como os manipuladores de procedimentos escritos em Scala e Python) requer um objeto Session da biblioteca do Snowpark. Aqui, a cláusula PACKAGES se refere à biblioteca do Snowpark incluída no Snowflake.CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT) RETURNS STRING LANGUAGE JAVA RUNTIME_VERSION = '11' PACKAGES = ('com.snowflake:snowpark:latest') HANDLER = 'MyClass.myMethod' AS $$ import com.snowflake.snowpark_java.*; public class MyClass { public String myMethod(Session session, String fromTable, String toTable, int count) { session.table(fromTable).limit(count).write().saveAsTable(toTable); return "Success"; } } $$;