dimension Heure et date dans l'entrepôt de données
-
22-09-2019 - |
Question
Je construis un entrepôt de données. Chaque fait a son timestamp
. Je dois créer des rapports par jour, mois, trimestre, mais en heures aussi. En regardant les exemples que je vois que les dates ont tendance à être enregistrées dans les tables de dimension.
(source: etl-tools.info )
Mais je pense que cela n'a aucun sens pour le temps. La table de dimension se développer et grandir. D'autre part JOIN avec table de dimension de date est plus efficace que d'utiliser les fonctions de date / heure dans SQL
.
Quelles sont vos opinions / solutions?
(j'utilise Infobright)
La solution
Je pense que cela dépend de votre exigence de déclaration. Si vous avez besoin besoin de quelque chose comme
WHERE "Hour" = 10
sens tous les jours entre 10:00:00 et 10:59:59, alors j'utilise la dimension temporelle, car il est plus rapide que
WHERE date_part('hour', TimeStamp) = 10
parce que la fonction date_part () sera évaluée pour chaque ligne. Vous devez toujours garder le TimeStamp dans le tableau de fait afin d'agréger sur les frontières de jours, comme dans:
WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15'
qui devient gênant lors de l'utilisation des champs de dimension.
En général, la dimension du temps a une résolution de minutes, donc 1440 lignes.
Autres conseils
recommande Kimball ayant des dimensions de temps séparés et la date:
conception -Tip-51-dernière pensée-sur-dimension temps-tables
Dans les livres de boîte à outils précédents, nous avons recommandé la construction d'une telle dimension avec la composante minutes ou secondes de temps en tant que décalage à partir de minuit chaque jour, mais nous sommes arrivés à réaliser que l'utilisateur final résultant applications sont devenues trop difficiles, surtout lorsque vous essayez de calculer le temps enjambe. En outre, contrairement à la journée de calendrier dimension, il y a très peu attributs descriptifs pour la minute ou seconde spécifique dans un journée. Si l'entreprise a bien attributs définis pour les tranches de temps dans un jour, comme les noms de décalage, ou créneaux horaires publicitaires, un montant supplémentaire dimension temps de jour peut être ajouté à la conception où cette dimension est défini comme étant le nombre de minutes (ou même secondes) après minuit. ainsi, ce dimension temps ofday devrait soit 1440 dossiers si le grain étaient minutes ou 86.400 dossiers si le grain était secondes.
Le temps devrait être une dimension sur les entrepôts de données, puisque vous voulez souvent agréger à ce sujet. Vous pouvez utiliser le flocon de neige-schéma pour réduire les frais généraux. En général, comme je l'ai souligné dans mon commentaire, les heures semblent comme une résolution exceptionnellement élevée. Si vous insistez sur eux, ce qui rend l'heure de la journée, une autre dimension peut aider, mais je ne peux pas vous dire si cela est une bonne conception.
Je recommande de dimension séparée pour la date et l'heure. Date Dimension aurait 1 record pour chaque date dans le cadre de la gamme valide identifiée de dates. Par exemple:. 01/01/1980 à 31/12/2025
Et une dimension séparée pour le temps ayant 86400 enregistrements avec chaque seconde ayant un enregistrement identifié par la clé de temps.
Dans les archives de fait, où le besoin d'u date et l'heure à la fois, ajoutez les deux clés ayant des références à ces dimensions conformes.