Funções Definidas pelo Usuário e Procedures

Automação de Pipelines de Dados no Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

O que é uma UDF?

nanobanana: half: Dois ícones de cadeado abstratos lado a lado, um aberto e outro fechado, design minimalista flat, cores azul marinho e verde da DataCamp, fundo branco, sem texto

User-Defined Functions

  • Operações personalizadas além das funções SQL nativas
  • Escritas em SQL, Python, Java, Scala ou JavaScript
  • Sem DDL ou DML — só retornam valores
  • Padrão ou SECURE (oculta a lógica de quem chama)
  • Retorna escalar por linha, ou uma tabela
Automação de Pipelines de Dados no Snowflake

UDFs em SQL

Ponto de partida recomendado

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
Automação de Pipelines de Dados no Snowflake

UDFs em Python e outras linguagens

Quando SQL não dá conta

CREATE FUNCTION parse_weight(label STRING)
RETURNS FLOAT LANGUAGE PYTHON
RUNTIME_VERSION = '3.9' HANDLER = 'parse'
AS $$ def parse(s): return float(s.split('kg')[0]) $$;
Automação de Pipelines de Dados no Snowflake

UDFs no pipeline

 

 

mermaid: pipeline da camada de transformação com UDF

UDFs ficam na camada de transformação — entre o armazenamento bruto e os relatórios

  • Chamadas dentro de SELECT; retornam um valor por linha
  • Centralizam a lógica de negócio usada em várias consultas
  • Adicione SECURE para ocultar a definição de outros usuários
Automação de Pipelines de Dados no Snowflake

O que é uma Stored Procedure?

  • Declarar variáveis, iterar resultados, tratar erros
  • Executar DML em várias tabelas
  • Chamadas de forma independente com CALL

mermaid: datacamp-purple: fluxo de orquestração de stored procedure

Automação de Pipelines de Dados no Snowflake

Stored Procedure: Snowflake Scripting

CREATE OR REPLACE PROCEDURE archive_old_shipments(cutoff INT)
RETURNS STRING LANGUAGE SQL AS $$
DECLARE                                    -- 1. Declare variables
    rows_moved INT DEFAULT 0;
BEGIN                                      -- 2. Begin the procedure
    INSERT INTO shipments_archive          -- 3. Execute SQL commands
        SELECT * FROM shipments WHERE delivery_days > :cutoff;
    rows_moved := SQLROWCOUNT;
    DELETE FROM shipments WHERE delivery_days > :cutoff;
    RETURN 'Archived ' || rows_moved       -- 4. Return the result
        || ' shipments.';
END;                                       -- 5. End the procedure
$$;
Automação de Pipelines de Dados no Snowflake

UDFs vs Stored Procedures

UDF Stored Procedure
Chamadas em SELECT CALL
Retorno Um valor por linha Valor único
Pode executar DML Não Sim
Linguagens SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Uso no pipeline Transformar dados Orquestrar lógica
Automação de Pipelines de Dados no Snowflake

Vamos praticar!

Automação de Pipelines de Dados no Snowflake

Preparing Video For Download...