Volver al hub
Snowflake

Generador de Secuencias de Snowflake

Las secuencias de Snowflake son objetos de base de datos, no transformaciones ETL. Son útiles cuando el warehouse debe ser dueño de los IDs generados.

Cuándo usarlo
  • Usa `CREATE SEQUENCE` cuando la generación de claves pertenezca a la capa de base de datos.
  • Llama a `NEXTVAL` en INSERTs, MERGEs o expresiones por defecto cuando las filas nuevas necesiten IDs numéricos únicos.
  • Mejor una secuencia por dominio de clave para que los rangos de IDs sean fáciles de razonar.
Sintaxis importante
SintaxisPropósitoEjemplo
CREATE SEQUENCEDefine el objeto de secuencia.CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1;
NEXTVALAvanza y devuelve el siguiente valor.customer_seq.NEXTVAL
ALTER SEQUENCEAjusta el comportamiento más adelante.ALTER SEQUENCE customer_seq SET INCREMENT = 10;
Flujo de clave gestionada por el warehouse
  1. 1Crea el objeto de secuencia en el esquema dueño de la tabla destino.
  2. 2Referencia `sequence_name.NEXTVAL` dentro de la sentencia INSERT o MERGE.
  3. 3Verifica que el ETL posterior no genere también una clave competidora.
  4. 4Documenta la propiedad de la secuencia para mantener alineadas las cargas y el DDL.
Código

Crear y usar una secuencia

CREATE OR REPLACE SEQUENCE customer_seq START = 1 INCREMENT = 1;

INSERT INTO dim_customer (customer_key, customer_name)
SELECT customer_seq.NEXTVAL, customer_name
FROM stg_customer;
FAQ

¿Por qué hay huecos en los valores de la secuencia?

Los huecos son normales. La unicidad importa más que una numeración perfectamente continua.

¿Deben ETL y Snowflake generar claves a la vez?

No. Elige un único dueño del ciclo de vida de la clave subrogada o el modelo se desalineará.

¿Puedo usar una secuencia de Snowflake como valor por defecto de una clave primaria?

Sí. Asigna NEXTVAL de la secuencia como valor por defecto de la columna: `ALTER TABLE t ALTER COLUMN id SET DEFAULT seq.NEXTVAL`. Así la generación de claves pasa a la capa de base de datos para todas las inserciones.

¿Cómo reinicio una secuencia tras truncar la tabla destino?

Usa `ALTER SEQUENCE seq_name SET VALUE = 0` para volver al valor inicial. La siguiente llamada a NEXTVAL devolverá el valor START (o START + INCREMENT si SET VALUE queda por encima).

Relacionado