Выбор ответа Middle Моделирование: Кимбалл, звезда, SCD спрашивают часто обновлено

Point-in-time JOIN

Вопрос

Факт продаж нужно соединить с измерением клиента в SCD 2 (valid_from, valid_to, где valid_to исключительная граница). Какое условие верно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: f.customerid = d.customerid AND f.saledate = d.validfrom AND f.saledate < d.validto. Нужна версия, действовавшая на дату продажи, а полуинтервал [validfrom, validto) не даёт двойных попаданий на границе.

Варианты ответа

  1. f.customer_id = d.customer_id AND d.is_current
  2. f.customer_id = d.customer_id AND f.sale_date >= d.valid_from AND f.sale_date < d.valid_toправильный ответ
  3. f.customer_id = d.customer_id AND f.sale_date >= d.valid_from
  4. f.customer_id = d.customer_id AND f.sale_date BETWEEN d.valid_from AND d.valid_to

Разбор

Нужна версия, действовавшая на дату продажи, а полуинтервал [valid_from, valid_to) не даёт двойных попаданий на границе. Условие с is_current даст текущие атрибуты, а не исторические. Условие только по valid_from сматчит продажу со всеми версиями, начавшимися до неё, и продажа размножится. BETWEEN включает обе границы, и продажа в день смены версии сматчится с двумя версиями.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.