Вопрос

Я строю хранилище данных. У каждого факта это timestamp. Анкет Мне нужно создавать отчеты днем, месяцем, кварталом, но по часам. Глядя на примеры, которые я вижу, даты, как правило, сохраняются в таблицах измерения. alt starexample
(источник: etl-tools.info)

Но я думаю, что это не имеет смысла для времени. Таблица измерений будет расти и расти. С другой стороны, соединение с таблицей измерений даты более эффективна, чем использование функций даты/времени в SQL.

Каковы ваши мнения/решения?

(Я использую Infobright)

Это было полезно?

Решение

Я предполагаю, что это зависит от вашего требования к отчетности. Если вам нужно что -то вроде

WHERE "Hour" = 10

То есть каждый день между 10:00:00 и 10:59:59, тогда я использовал бы время, потому что оно быстрее, чем

WHERE date_part('hour', TimeStamp) = 10  

потому что функция date_part () будет оценена для каждой строки. Вы все равно должны сохранить метку времени в таблице фактов, чтобы объединить границы дней, как в:

WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 

что становится неловким при использовании поля измерения.

Обычно время времени имеет минутное разрешение, поэтому 1440 рядов.

Другие советы

Кимбалл рекомендует иметь отдельные размеры времени и даты:

Design-Tip-51-Late-Clifing-Ty-Dimession-Demension Tables

В предыдущих книгах инструментария мы рекомендовали построить такое измерение с компонентом протоколов или секунд времени в качестве смещения с полуночи каждого дня, но мы поняли, что полученные приложения конечных пользователей стали слишком сложными, особенно когда пытались вычислить Время простирается. Кроме того, в отличие от измерения дня календаря, очень мало описательных атрибутов для конкретной минуты или секунды в течение дня. Если на предприятии есть четко определенные атрибуты для ломтиков времени в течение дня, такие как имена смены или рекламные временные интервалы, в дизайн можно добавить дополнительное размер времени дня, где это измерение определяется как количество минут (или даже секунды) после полуночи. Таким образом, это измерение времени дня будет иметь либо 1440 записей, если бы зерно было минут или 86 400 записей, если зерно было секундами.

Время должно быть измерением на хранилищах данных, так как вы часто захотите агрегировать об этом. Вы можете использовать Снежинка-схема Чтобы уменьшить накладные расходы. В общем, как я указал в своем комментарии, часы кажутся необычайно высоким разрешением. Если вы настаиваете на них, сделав час дня, может помочь отдельное измерение, но я не могу сказать вам, хороший ли это дизайн.

Я бы порекомендовал получить отдельное измерение для даты и времени. Дата измерения будет иметь 1 запись для каждой даты как часть определенного достоверного диапазона дат. Например: от 01.01.1980 до 31.12.2025.

И отдельное измерение для времени, имеющего 86400 записей, причем каждая секунду имеет запись, идентифицированную к клавишу времени.

В фактах, когда вам нужна дата и время, добавьте оба ключа, имеющие ссылки на эти соответствующие измерения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top