Question

Nous commençons à charger une maison de données avec des données des journaux d'événements. Nous avons un schéma d'étoile normal où une ligne dans la table de faits représente un événement. Nos tables de dimension sont une combinaison typique de user_agent, ip, référentiel, page, etc. Une table de dimension ressemble à ceci:

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

Où nous autogénérez automatiquement l'ID pour finalement nous joindre à la table des faits. Ma question est: quelle est la meilleure façon d'identifier les enregistrements en double dans notre processus de charge en vrac? Nous téléchargeons tous les enregistrements pour un fichier journal dans les tables temporaires avant de faire l'insert réel dans le magasin persistant, cependant, l'ID est juste incrémenté automatiquement, donc deux enregistrements DIM identiques de deux jours auraient des ID différents. La création d'un hachage des colonnes de valeur serait-elle appropriée et essaierait-elle ensuite de comparer cela? Il semble que essayer de comparer chaque colonne de valeur serait lent. Y a-t-il des meilleures pratiques pour une situation comme celle-ci?

Était-ce utile?

La solution

Un entier d'auto-incrémentation pour un PK de substitution est OK, mais (selon M. Kimball), une table de dimension devrait également avoir une clé naturelle. Donc un hachage NaturalKey la colonne serait en ordre, également un Status La colonne pour "courant" ou "expiré" peut être utile pour permettre le type SCD 2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top