Voltar ao hub
Snowflake

Snowflake Sequence Generator

As sequências do Snowflake são objetos de banco de dados, não transformações ETL. São úteis quando o data warehouse deve ser dono dos IDs gerados.

Quando usar
  • Use `CREATE SEQUENCE` quando a geração de chaves pertence à camada de banco de dados.
  • Chame `NEXTVAL` em inserções, merges ou expressões default quando novas linhas precisarem de IDs numéricos únicos.
  • Prefira uma sequência por domínio de chave para manter as faixas de ID fáceis de entender.
Sintaxe importante
SintaxeFinalidadeExemplo
CREATE SEQUENCEDefine o objeto sequence.CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1;
NEXTVALAvança e retorna o próximo valor.customer_seq.NEXTVAL
ALTER SEQUENCEAjusta o comportamento depois.ALTER SEQUENCE customer_seq SET INCREMENT = 10;
Fluxo de chave pertencente ao warehouse
  1. 1Crie o objeto sequence no schema que é dono da tabela de destino.
  2. 2Referencie `sequence_name.NEXTVAL` dentro da instrução INSERT ou MERGE.
  3. 3Valide que o ETL a jusante também não está gerando uma chave concorrente.
  4. 4Documente o dono da sequence para manter cargas e DDL alinhados.
Código

Criar e usar uma sequence

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;
Perguntas frequentes

Por que há lacunas nos valores da sequência?

Lacunas são normais. A unicidade importa mais do que uma numeração perfeitamente contígua.

O ETL e o Snowflake devem gerar chaves ao mesmo tempo?

Não. Escolha um único dono para o ciclo de vida da chave surrogate, ou o modelo vai se desalinhar.

Posso usar uma sequência do Snowflake como default de chave primária?

Sim. Atribua o NEXTVAL da sequência como valor default da coluna: `ALTER TABLE t ALTER COLUMN id SET DEFAULT seq.NEXTVAL`. Isso move a geração de chaves para a camada de banco em todas as operações de INSERT.

Como redefinir uma sequência após truncar a tabela de destino?

Use `ALTER SEQUENCE seq_name SET VALUE = 0` para voltar ao valor inicial. A próxima chamada de NEXTVAL retorna o valor de START (ou START + INCREMENT, se SET VALUE estiver acima).

Relacionados