Упрощение
This commit is contained in:
@@ -271,19 +271,6 @@ WHERE c.customer_id IS NULL OR c.category != n.category; -- условие ве
|
|||||||
|
|
||||||
### 🎯 Как работает этот запрос: пошаговое объяснение
|
### 🎯 Как работает этот запрос: пошаговое объяснение
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph TD
|
|
||||||
A[new_customers<br/>новые данные] --> B[CTE: current_customers]
|
|
||||||
C[dim_customers_scd2<br/>текущее состояние] --> B
|
|
||||||
B --> D[LEFT JOIN по customer_id]
|
|
||||||
A --> D
|
|
||||||
D --> E{Условие WHERE}
|
|
||||||
E -->|Новый клиент| F[Вставить запись]
|
|
||||||
E -->|Изменения| F
|
|
||||||
E -->|Без изменений| G[Пропустить]
|
|
||||||
F --> H[dim_customers_scd2<br/>обновленная таблица]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Шаг 1: Подготовка данных (CTE current_customers)
|
#### Шаг 1: Подготовка данных (CTE current_customers)
|
||||||
CTE `current_customers` находит **последнюю версию** каждого клиента из таблицы `dim_customers_scd2`:
|
CTE `current_customers` находит **последнюю версию** каждого клиента из таблицы `dim_customers_scd2`:
|
||||||
|
|
||||||
@@ -317,11 +304,6 @@ LEFT JOIN current_customers c ON n.customer_id = c.customer_id
|
|||||||
- `uuid()` — генерируем уникальный ключ для новой версии (функция, скобки обязательны)
|
- `uuid()` — генерируем уникальный ключ для новой версии (функция, скобки обязательны)
|
||||||
- `COALESCE(n.effective_date, current_date)` — устанавливаем дату начала действия новой версии
|
- `COALESCE(n.effective_date, current_date)` — устанавливаем дату начала действия новой версии
|
||||||
|
|
||||||
> 💡 **Синтаксическая поправка**:
|
|
||||||
> - `current_date` — это ключевое слово, а не функция, поэтому скобки не нужны
|
|
||||||
> - `uuid()` — это функция, поэтому скобки обязательны
|
|
||||||
> - Разница: `current_date` возвращает текущую дату, `uuid()` генерирует уникальный идентификатор
|
|
||||||
|
|
||||||
> 💡 **Правильный подход к датам**: В реальных ETL-процессах важно использовать дату из исходных данных, когда она доступна. Мы используем `COALESCE(n.effective_date, current_date)`, что означает:
|
> 💡 **Правильный подход к датам**: В реальных ETL-процессах важно использовать дату из исходных данных, когда она доступна. Мы используем `COALESCE(n.effective_date, current_date)`, что означает:
|
||||||
> - Если в `new_customers` есть поле `effective_date` — используем его
|
> - Если в `new_customers` есть поле `effective_date` — используем его
|
||||||
> - Если нет — используем текущую дату (`current_date`)
|
> - Если нет — используем текущую дату (`current_date`)
|
||||||
|
|||||||
Reference in New Issue
Block a user