Exemplos de uso do Git com Snowflake¶
Exemplos neste tópico descrevem como usar um repositório Git integrado ao desenvolver aplicativos Snowflake e como executar scripts de SQL em um repositório.
Use um arquivo de repositório Git como um manipulador de procedimento armazenado¶
Depois que você tiver configurado a integração entre o Snowflake e seu repositório Git, você pode usar arquivos do repositório como código do manipulador em procedimentos armazenados e UDFs. Observe que, assim como acontece com outros manipuladores em estágio, você deve qualificar o nome da função do manipulador com o nome da classe ou módulo que o contém.
Este exemplo descreve como usar o código do manipulador Python do repositório em um procedimento armazenado.
Código exigido por este exemplo¶
O manipulador neste exemplo depende de um banco de dados criado com código SQL semelhante ao seguinte:
CREATE DATABASE example_db;
USE DATABASE example_db;
CREATE SCHEMA example_schema;
USE SCHEMA example_schema;
CREATE OR REPLACE TABLE employees(id NUMBER, name VARCHAR, role VARCHAR);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'op'), (2, 'Bob', 'dev'), (3, 'Cindy', 'dev');
O exemplo usa o seguinte código de manipulador Python contido em filter.py
:
from snowflake.snowpark.functions import col
def filter_by_role(session, table_name, role):
df = session.table(table_name)
return df.filter(col("role") == role)
Confirme o arquivo e atualize o estágio do repositório¶
No seu cliente Git, adicione o código ao repositório.
O código no exemplo a seguir usa a ferramenta de linha de comando git para adicionar e confirmar o arquivo do manipulador no repositório local e, em seguida, enviá-lo para o repositório remoto referenciado pelo estágio do repositório no Snowflake:
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
No Snowflake, atualize o estágio do repositório.
Supondo que você tenha configurado a integração entre o Snowflake e seu repositório Git, resultando em um estágio de repositório, você pode atualizar o estágio buscando no repositório.
Usar o Snowflake para atualizar seu repositório é semelhante a trabalhar com outras ferramentas de cliente Git, onde você busca no repositório antes de começar a trabalhar para garantir que você tenha as alterações mais recentes.
O código no exemplo a seguir executa o comando ALTER GIT REPOSITORY para recuperar as últimas alterações do repositório. O código gera um clone completo que inclui ramificações, tags e commits.
ALTER GIT REPOSITORY snowflake_extensions FETCH;
Criação e execução de um procedimento que usa o arquivo no repositório¶
No Snowflake, escreva o procedimento.
Ao escrever um procedimento, você pode referenciar seu código do manipulador no local do arquivo de código no estágio do repositório. Por exemplo, para se referir a um arquivo
python-handlers/filter.py
na ramificação principal de um repositório sincronizado com um estágio de repositório Git chamadosnowflake_extensions
, você usaria uma sintaxe semelhante à seguinte:@snowflake_extensions/branches/main/python-handlers/filter.py
O código no exemplo a seguir cria um procedimento chamado
filter_by_role
, especificando o código do manipulador armazenado no estágio do repositório:CREATE OR REPLACE PROCEDURE filter_by_role(tableName VARCHAR, role VARCHAR) RETURNS TABLE(id NUMBER, name VARCHAR, role VARCHAR) LANGUAGE PYTHON RUNTIME_VERSION = '3.9' PACKAGES = ('snowflake-snowpark-python') IMPORTS = ('@example_db.example_schema.snowflake_extensions/branches/main/python-handlers/filter.py') HANDLER = 'filter.filter_by_role';
Execute o procedimento.
O código a seguir executa o procedimento.
CALL filter_by_role('employees', 'dev');
Aqui está um exemplo de saída do procedimento.
--------------------- | ID | NAME | ROLE | --------------------- | 2 | Bob | dev | --------------------- | 3 | Cindy | dev | ---------------------
Uso de um arquivo de repositório Git para configurar novas contas¶
Este exemplo descreve como executar um script SQL contido em um estágio de repositório. O script no exemplo cria um usuário e uma função.
Este exemplo usa o comando EXECUTE IMMEDIATE FROM para executar as instruções SQL contidas em um arquivo no estágio de repositório.
Com EXECUTE IMMEDIATE FROM, você pode executar (de qualquer sessão do Snowflake) scripts que você gerencia no seu repositório Git. Por exemplo, você pode ter um script que configura cada nova conta Snowflake na sua organização. O script pode conter instruções para criar usuários, funções, objetos e conceder privilégios na conta e nos objetos.
Crie o arquivo
setup.sql
com o seguinte conteúdo:CREATE ROLE analyst; CREATE USER gladys; GRANT ROLE analyst TO USER gladys; SHOW GRANTS TO USER gladys;
Confirme seu arquivo SQL em seu repositório Git. Para instruções detalhadas, consulte Confirme o arquivo e atualize o estágio do repositório.
Use a ferramenta de linha de comando git para confirmar o arquivo em seu repositório Git:
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
No Snowflake, atualize o estágio do repositório. Para instruções detalhadas, consulte Confirme o arquivo e atualize o estágio do repositório.
Atualize o estágio do repositório
configuration_repo
:ALTER GIT REPOSITORY configuration_repo FETCH;
No Snowflake, execute o arquivo no seu estágio de repositório:
Nota
O usuário que executa a instrução a seguir deve usar uma função que tenha os privilégios necessários para executar todas as instruções no arquivo. Para obter mais informações, consulte Requisitos de controle de acesso.
EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
Os comando EXECUTE IMMEDIATE FROM retorna os resultados da última instrução SQL no arquivo:
+-------------------------------+---------+------------+--------------+--------------+ | created_on | role | granted_to | grantee_name | granted_by | |-------------------------------+---------+------------+--------------+--------------| | 2023-07-24 22:07:04.354 -0700 | ANALYST | USER | GLADYS | ACCOUNTADMIN | +-------------------------------+---------+------------+--------------+--------------+