Funciones definidas por el usuario y procedimientos almacenados

Automatización de canalizaciones de datos en Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

¿Qué es una UDF?

nanobanana: half: Dos iconos de candado abstractos lado a lado, uno abierto y otro cerrado, diseño minimalista plano, colores azul marino y verde de DataCamp, fondo blanco, sin texto

Funciones definidas por el usuario (UDF)

  • Operaciones personalizadas más allá de las funciones SQL nativas
  • Escritas en SQL, Python, Java, Scala o JavaScript
  • Sin DDL ni DML: solo devuelven valores
  • Estándar o SECURE (oculta la lógica a quienes llaman)
  • Devuelven un escalar por fila o una tabla
Automatización de canalizaciones de datos en Snowflake

UDF en SQL

Punto 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 $$;
Automatización de canalizaciones de datos en Snowflake

UDF en Python y otros lenguajes

Cuando SQL no basta

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]) $$;
Automatización de canalizaciones de datos en Snowflake

UDF en el pipeline

 

 

mermaid: Capa de transformación con UDF en el pipeline

Las UDF se ubican en la capa de transformación: entre el almacenamiento bruto y los informes

  • Se llaman dentro de SELECT; devuelven un valor por fila
  • Centralizan lógica de negocio usada en varias consultas
  • Añade SECURE para ocultar la definición a otros usuarios
Automatización de canalizaciones de datos en Snowflake

¿Qué es un procedimiento almacenado?

  • Declarar variables, iterar resultados, manejar errores
  • Ejecutar DML en varias tablas
  • Se llaman de forma independiente con CALL

mermaid: datacamp-purple: flujo de orquestación de procedimiento almacenado

Automatización de canalizaciones de datos en Snowflake

Procedimiento almacenado: 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
$$;
Automatización de canalizaciones de datos en Snowflake

UDF vs. procedimientos almacenados

UDF Procedimiento almacenado
Se llama en SELECT CALL
Devuelve Un valor por fila Un único valor
Puede ejecutar DML No
Lenguajes SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Uso en el pipeline Transformar datos Orquestar lógica
Automatización de canalizaciones de datos en Snowflake

¡Vamos a practicar!

Automatización de canalizaciones de datos en Snowflake

Preparing Video For Download...