Hora y fecha dimensión en almacén de datos
-
22-09-2019 - |
Pregunta
Estoy construyendo un almacén de datos. Cada hecho tiene su timestamp
. Necesito crear informes por día, mes, trimestre, pero por horas también. En cuanto a los ejemplos que veo que las fechas tienden a ser guardado en las tablas de dimensiones.
(fuente: etl-tools.info )
Pero creo, que no tiene sentido para el tiempo. La tabla de dimensiones sería crecer y crecer. Por otro lado se unan a la fecha tabla de dimensiones es más eficiente que el uso de las funciones de fecha / hora en SQL
.
¿Cuáles son sus opiniones / soluciones?
(estoy usando Infobright)
Solución
Mi conjetura es que depende de su requisito de información. Si necesita necesita algo así como
WHERE "Hour" = 10
es decir, todos los días 10:00:00-10:59:59, entonces yo uso la dimensión del tiempo, ya que es más rápido que
WHERE date_part('hour', TimeStamp) = 10
porque la función date_part () será evaluado para cada fila. Aún debe mantener la marca de hora en la tabla de hechos con el fin de agregar sobre los límites de días, como en:
WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15'
que se pone incómodo al usar campos de dimensión.
Por lo general, la dimensión de tiempo tiene una resolución minuto, por lo que 1440 filas.
Otros consejos
Kimball recomienda que tiene dimensiones tiempo- y fecha separadas:
diseñoTIP-51-última-pensamiento-en-tiempo-dimensión mesas
En los libros anteriores Toolkit, que tiene se recomienda la construcción de una dimensión tan con el minuto o segundo componente de tiempo como un desplazamiento desde la medianoche de cada día, pero nos hemos dado cuenta que el usuario final resultante aplicaciones llegaron a ser demasiado difícil, especialmente cuando se trata de calcular el tiempo vanos. Además, a diferencia del día natural dimensión, hay muy pocos atributos descriptivos para la minuto específico o dentro de un segundo día. Si la empresa tiene también atributos definidos para intervalos de tiempo dentro de un día, tales como nombres de turno, o la publicidad de los intervalos de tiempo, un adicional de tiempo de días dimensión puede ser añadido a el diseño en el que esta dimensión es se define como el número de minutos (o incluso segundos) después de la medianoche. Así, este dimensión de tiempo-ofday tendrá que o bien 1440 registros si el grano fueron minutos o 86.400 registros si el grano eran segundos.
El tiempo debe ser una dimensión de almacenes de datos, ya que con frecuencia tendrá que agregar al respecto. Se podría utilizar el copo-Esquema para reducir la sobrecarga. En general, como he señalado en mi comentario, las horas parecen como una inusualmente alta resolución. Si insiste en ellas, por lo que la hora del día a la ayuda dimensión podría separarse, pero no se puede saber si se trata de un buen diseño.
Yo recomendaría tener dimensión separada para la fecha y la hora. Fecha Dimensión tendría 1 registro para cada fecha como parte del rango válido identificada de fechas. Por ejemplo:. 01/01/1980 hasta 12/31/2025
Y una dimensión separada para tener tiempo de 86.400 registros con cada segundo que tiene un registro identificado por la clave de tiempo.
En los registros de datos, donde u necesita fecha y hora tanto, añadir las dos teclas que tienen referencias a estas dimensiones conformadas.