Представьте таблицу фактов с суммированием мер за период времени, скажем, 1 час.
Start Date | Measure 1 | Measure 2
-------------------------------------------
2018-09-08 00:00:00 | 5 | 10
2018-09-08 00:01:00 | 12 | 20
В идеале мы хотим сохранить зерно таким, чтобы каждый ряд составлял ровно 1 час. Однако каждая строка ссылается на измерения, которые могут «сломать» зерно Например:
Start Date | Measure 1 | Measure 2 | Dim 1
---------------------------------------------------
2018-09-08 00:00:00 | 5 | 10 | key 1
2018-09-08 00:01:00 | 12 | 20 | key 2
Возможно, что значение измерения может измениться на 30 минут в час, и в этом случае приведенное выше будет неточным и должно быть представлено следующим образом:
Start Date | Measure 1 | Measure 2 | Dim 1
---------------------------------------------------
2018-09-08 00:00:00 | 5 | 10 | val 1
2018-09-08 00:00:30 | 5 | 10 | val 2
2018-09-08 00:01:00 | 12 | 20 | val 2
В нашем сценарии данные должны быть разрезаны по крайней мере на 5 ключей измерения с такими запросами:
sum(measure1) where dim1 = x and dim2 = y..
Существует ли шаблон проектирования для этого требования? Я рассмотрел «периодические снимки», но я нигде не читал об этом виде разделения строк при изменениях размеров.
Я вижу только два варианта:
- Сохраните значения измерений, которые наиболее присутствовали в каждой строке (например, если значение измерения было истинным в течение большей части времени в часе, используйте это значение). Это приведет к некоторой потере точности.
- Разделять каждую строку при каждом изменении размера. Это сложно в ETL, создает больше данных и нарушает правило гранулярности в таблице фактов.
Вариант 2 является текущим решением и служит цели, но его сложнее поддерживать. Есть ли лучший способ сделать это или другие варианты?
В качестве реального примера, эта система записывает производственные данные в производственной среде, поэтому данные выглядят примерно так:
Line | Date | Crew | Product | Running Time (mins)
-----------------------------------------------------------------------
Line 1 | 2018-09-08 00:00:00 | Crew A | Product A | 60
Как уже отмечалось, экипаж, изделие или любое другое измерение может меняться несколько раз в течение часа.