44 lines
1.6 KiB
SQL
44 lines
1.6 KiB
SQL
-- ===============================================
|
|
-- DDL: дополнительные таблицы для домашки
|
|
-- Тема: статусы клиента (SCD2 поверх статуса)
|
|
-- Скрипт можно запускать после 01_ddl_stg-dds.sql
|
|
-- ===============================================
|
|
|
|
-- 1. STG: сырые события о статусе клиента из CRM
|
|
DROP TABLE IF EXISTS stg.customer_status_raw;
|
|
CREATE TABLE stg.customer_status_raw (
|
|
customer_id TEXT,
|
|
status TEXT,
|
|
event_ts TEXT,
|
|
_load_id TEXT,
|
|
_load_ts TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- 2. ODS: очищенные и типизированные статусы
|
|
DROP TABLE IF EXISTS ods.customer_status;
|
|
CREATE TABLE ods.customer_status (
|
|
customer_id INT NOT NULL,
|
|
status VARCHAR(20) NOT NULL,
|
|
event_ts TIMESTAMP NOT NULL,
|
|
_load_id TEXT NOT NULL,
|
|
_load_ts TIMESTAMP NOT NULL
|
|
);
|
|
|
|
ALTER TABLE ods.customer_status
|
|
ADD PRIMARY KEY (customer_id, event_ts);
|
|
|
|
-- 3. DDS: измерение статусов клиента с историей (SCD Type 2)
|
|
DROP TABLE IF EXISTS dds.dim_customer_status;
|
|
CREATE TABLE dds.dim_customer_status (
|
|
customer_status_sk BIGSERIAL PRIMARY KEY,
|
|
customer_bk INT NOT NULL,
|
|
status VARCHAR(20) NOT NULL,
|
|
hashdiff TEXT NOT NULL,
|
|
valid_from TIMESTAMP NOT NULL,
|
|
valid_to TIMESTAMP NOT NULL,
|
|
is_current BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|