Pergunta

Estamos começando a carregar um DataWareHouse com dados de logs de eventos. Temos um esquema de estrela normal, onde uma linha na tabela de fatos representa um evento. Nossas tabelas de dimensão são uma combinação típica de user_agent, IP, referência, página, etc. Uma tabela de uma dimensão é assim:

create table referal_dim(
  id integer,
  domain varchar(255),
  subdomain varchar(255),
  page_name varchar(4096),
  query_string varchar(4096)
  path varchar(4096)
)

Onde nós autogeramos o ID para eventualmente se juntar à tabela de fatos. Minha pergunta é: qual é a melhor maneira de identificar registros duplicados em nosso processo de carga a granel? Nós carregamos todos os registros de um arquivo de log nas tabelas temp antes de fazer a inserção real no armazenamento persistente; no entanto, o ID é apenas incrementado automaticamente, portanto, dois registros escuros idênticos de dois dias teriam IDs diferentes. Criar um hash das colunas de valor seria apropriado e, em seguida, tentar comparar nisso? Parece que tentar comparar em cada coluna de valor seria lento. Existe alguma prática recomendada para uma situação como essa?

Foi útil?

Solução

O número inteiro de incremento automático para um PK substituto é bom, mas (de acordo com o Sr. Kimball) uma tabela de dimensão também deve ter uma chave natural. Então, um hash NaturalKey coluna estaria em ordem, também um Status A coluna para "atual" ou "expirada" pode ser útil para permitir o SCD tipo 2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top