Zaczynamy projektować elementy składowe hurtowni danych i musimy być w stanie obsługiwać wszystkie strefy czasowe (nasi klienci pochodzą z całego świata). Po przeczytaniu dyskusji online (i książek) powszechnym rozwiązaniem wydaje się mieć osobny wymiar daty i godziny oraz znacznik czasu w tabelach faktów.
Jednak pytanie, na które trudno mi odpowiedzieć, brzmi: co właściwie ma dla mnie wymiar daty i godziny, biorąc pod uwagę moje wymagania dotyczące dynamicznej strefy czasowej? Wymiar czasu ma trochę więcej sensu, ale mam trudności z wymiarem daty. Ogólne podejście do projektowania wymiaru daty zwykle obejmuje takie właściwości, jak nazwa dnia, dzień tygodnia, nazwa miesiąca itp. Problem, który mam ze wszystkim, to jest o 23:00 we wtorek, 31 grudnia 2013 r. W UTC jest środa , 1 stycznia 2014 r. We wszystkich strefach czasowych po UTC + 2.
Więc jeśli będę musiał wykonać wszystkie te konwersje stref czasowych dla każdego zapytania (i raportu), jaki jest sens posiadania i przechowywania tych właściwości, których prawdopodobnie nigdy nie użyję (wydaje się)? Niektóre osoby sugerują tworzenie wierszy faktów dla każdej strefy czasowej, ale wydaje mi się to śmieszne. Musimy być w stanie przechowywać miliony rekordów każdego miesiąca.
Inni sugerują posiadanie tabeli mostu strefy czasowej, co choć ma sens, wydaje się również dodatkową złożonością i dodatkowymi połączeniami, aby osiągnąć coś, co moje aplikacje klienckie i raporty powinny z łatwością ustalić na podstawie daty (raportowanie będzie przede wszystkim oparte na Internecie gdzie istnieje niezliczona ilość bibliotek pomocnych w konwertowaniu, wyświetlaniu i formatowaniu dat).
Jedyne, co mogę wymyślić, to łatwość i być może wydajność grupowania według daty i godziny, ale jak kiepska jest praktyka grupowania według dat (korzystamy z MS SQL, ale będziemy sprawdzać miliony wierszy) lub powinniśmy rozważyć po prostu niezwykle proste wymiary daty i godziny, w większości z nie więcej niż godzinami, dniami, miesiącami i rokami, ponieważ większość literałów, takich jak poniedziałek, nie miałaby większego znaczenia, kiedy w grę wchodzą strefy czasowe?
źródło
Odpowiedzi:
Po pierwsze...
Rozdzielenie
Datime/Time
naDate
wymiar iTime
wymiar jest zdecydowanie właściwą drogą.Aby zarządzać wieloma strefami czasowymi, musisz zduplikować
DateKey
iTimeKey
, aby mieć następujące elementy:LocalDateKey
LocalTimeKey
UtcDateKey
UtcTimeKey
Mówisz...
Mając 4 kolumny, które wymieniłem powyżej, będziesz mógł połączyć tabelę faktów z wymiarem Data i / lub Czas za pomocą aliasów tabeli (w terminologii Kimball te aliowane tabele wymiarów są znane jako „Wymiary do odgrywania ról”), więc masz coś takiego:
W zamknięciu...
Podczas budowania mart data, a nie bazy danych OLTP, generowanie czasu lokalnego i utc powinno odbywać się w twoim ETL , a NIE w żadnej aplikacji po stronie klienta z następujących powodów (oprócz lokalizacji czasu UTC do perspektywa czytelnika raportu):
StandardisedDateKey
, lubCorporateHQDateKey
zamiast tabeli dat UTC standaryzujesz w oparciu o inny standard uzgodniony biznesowoźródło
Date
iTime
wymiary zamiast jednegoDateTime
? Tabela faktów może mieć kilka dat, a można zapisać dwie INT zamiast jednej dla każdej z nich.Z góry przepraszam za zwięzłość tej odpowiedzi i planuję rozwinąć ją, gdy nie będę w pracy.
Z pewnością istnieją zalety posiadania tabel dat i godzin, ponieważ pozwalają one na łatwą agregację danych. W wielu przypadkach jest to najprostszy sposób sortowania według tego rodzaju rzeczy według miesiąca lub dni roboczych. Nie musi to jednak zastępować przydatności znacznika czasu. W twoim szczególnym przypadku znacznik czasu UTC. Po uzyskaniu znacznika czasu wystarczy zmienić go na czas lokalny w warstwie raportu lub prezentacji. Aby uniknąć skanowania zasięgu, upewnij się, że konwertujesz również zakres żądań na czas UTC.
Jeśli masz jakiekolwiek pytania lub komentarze, możesz je zadać.
źródło