Exemplos de uso do Git com Snowflake¶
Os exemplos deste tópico descrevem como usar arquivos de um repositório Git remoto ao desenvolver aplicativos Snowflake e como executar scripts SQL em um clone do repositório Git.
Não deixe de ver os itens a seguir, que descrevem outras maneiras de interagir com um clone do repositório Git.
Use um arquivo de repositório Git como um manipulador de procedimento armazenado¶
Depois que você configurar a integração entre o Snowflake e o repositório Git remoto, você pode usar os arquivos do repositório como código manipulador em procedimentos armazenados e UDFs. Observe que, assim como acontece com manipuladores em estágios, 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)
Confirmar o arquivo e atualizar o clone do repositório Git¶
No seu cliente Git, adicione o código ao repositório remoto.
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 clone do repositório Git no Snowflake:
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
No Snowflake, atualize o clone do repositório Git.
Supondo que você tenha configurado a integração entre o Snowflake e o seu repositório Git remoto, resultando em um clone do repositório Git no Snowflake, é possível atualizar o clone do repositório Git buscando no repositório remoto.
Usar o Snowflake para atualizar a partir do seu repositório remoto é semelhante a trabalhar com outras ferramentas de cliente Git, em que você busca no repositório remoto antes de começar a trabalhar para garantir que tenha as alterações mais recentes.
O código no exemplo a seguir executa o comando ALTER GIT REPOSITORY para recuperar as alterações mais recentes do repositório remoto. O código gera um clone completo que inclui ramificações, tags e commits.
ALTER GIT REPOSITORY snowflake_extensions FETCH;
Criar e executar um procedimento que use o arquivo no clone do repositório Git¶
No Snowflake, escreva o procedimento.
Quando você escreve um procedimento, pode fazer referência ao seu código manipulador no local do arquivo do código no clone do repositório Git no Snowflake. Por exemplo, para se referir a um arquivo
python-handlers/filter.py
na ramificação principal de um repositório remoto sincronizado com um clone do 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 clone do repositório Git: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 | ---------------------
Usar um arquivo do clone do repositório Git para configurar novas contas¶
Este exemplo descreve como executar um script SQL contido em um clone do repositório Git no Snowflake. 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 clone do repositório Git.
Com EXECUTE IMMEDIATE FROM, você pode executar (de qualquer sessão do Snowflake) scripts que você gerencia no repositório Git remoto. 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 remoto.
Use a ferramenta de linha de comando git para confirmar o arquivo em seu repositório Git remoto:
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
Para instruções detalhadas, consulte Confirmar o arquivo e atualizar o clone do repositório Git.
Atualize o clone do repositório Git.
Atualize o clone do repositório Git
configuration_repo
:ALTER GIT REPOSITORY configuration_repo FETCH;
Para instruções detalhadas, consulte Confirmar o arquivo e atualizar o clone do repositório Git.
No Snowflake, execute o arquivo no clone do seu repositório Git:
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 | +-------------------------------+---------+------------+--------------+--------------+