Упрощение

This commit is contained in:
2025-11-04 17:45:03 +03:00
parent f18bd7ea39
commit 197ef1b0d2
-18
View File
@@ -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`)