- Зачем: - подготовлен учебный Star Schema слой для перехода от ODS к аналитике и витринам. - Что: - добавлены 21 SQL-файл для DDS (DDL/LOAD/DQ) с SCD1/SCD2 и фактом `fact_flight_sales`. - добавлены DAG `bookings_dds_ddl` и `bookings_to_gp_dds`, а также smoke-тесты структуры DAG. - обновлены `sql/ddl_gp.sql` и документация (`README`, `docs/*`, `db_schema`) под поток `stg -> ods -> dds`. - Проверка: - make test.
30 lines
1.0 KiB
SQL
30 lines
1.0 KiB
SQL
-- Загрузка DDS dim_calendar: статическое измерение (генерация дат).
|
|
-- Заполняем только если таблица пуста (идемпотентно).
|
|
|
|
INSERT INTO dds.dim_calendar (
|
|
calendar_sk,
|
|
date_actual,
|
|
year_actual,
|
|
month_actual,
|
|
day_actual,
|
|
day_of_week,
|
|
day_name,
|
|
is_weekend
|
|
)
|
|
SELECT
|
|
ROW_NUMBER() OVER (ORDER BY d.date_actual)::INTEGER AS calendar_sk,
|
|
d.date_actual,
|
|
EXTRACT(YEAR FROM d.date_actual)::INTEGER AS year_actual,
|
|
EXTRACT(MONTH FROM d.date_actual)::INTEGER AS month_actual,
|
|
EXTRACT(DAY FROM d.date_actual)::INTEGER AS day_actual,
|
|
EXTRACT(ISODOW FROM d.date_actual)::INTEGER AS day_of_week,
|
|
TO_CHAR(d.date_actual, 'FMDay') AS day_name,
|
|
EXTRACT(ISODOW FROM d.date_actual) IN (6, 7) AS is_weekend
|
|
FROM (
|
|
SELECT generate_series('2016-01-01'::DATE, '2030-12-31'::DATE, '1 day'::INTERVAL)::DATE
|
|
AS date_actual
|
|
) AS d
|
|
WHERE NOT EXISTS (SELECT 1 FROM dds.dim_calendar LIMIT 1);
|
|
|
|
ANALYZE dds.dim_calendar;
|