refactor(sql): заменен тип сжатия zlib на zstd для AO-таблиц
- Зачем: - zstd (level 1) является современным стандартом для Greenplum 6.0+, обеспечивая более высокую скорость декомпрессии и лучшее сжатие. - Что: - обновлены все DDL стейджинга (STG) и базовых таблиц. - обновлена архитектурная документация (ADR-3) и планы реализации. - исправлены примеры кода в Airflow DAG и описании ETL. - Проверка: - успешное выполнение CREATE TABLE с новыми параметрами в Greenplum 6.27.1.
This commit is contained in:
@@ -101,10 +101,10 @@ GP-специфичная best practice, которую забывают даж
|
||||
- 18 из 28 таблиц имеют неявный heap (нет `WITH`) — студент не видит, что выбор сделан
|
||||
- **Целевая раскладка по storage:**
|
||||
- **AO Column Store**: `dds.dim_calendar` (write-once, generate_series)
|
||||
- **AO Row + zlib**: ODS snapshot-справочники (`airports`, `airplanes`, `routes`, `seats`)
|
||||
- **AO Row + zstd**: ODS snapshot-справочники (`airports`, `airplanes`, `routes`, `seats`)
|
||||
— перевести загрузку с UPSERT на TRUNCATE+INSERT (честнее для full snapshot семантики)
|
||||
- **AO Row + zlib**: `dds.dim_tariffs` (только INSERT, нет UPDATE)
|
||||
- **AO Row + zlib**: `dm.route_performance` (full rebuild, по дизайну)
|
||||
- **AO Row + zstd**: `dds.dim_tariffs` (только INSERT, нет UPDATE)
|
||||
- **AO Row + zstd**: `dm.route_performance` (full rebuild, по дизайну)
|
||||
- **Heap (явный)**: ODS транзакционные (`bookings`, `tickets`, `flights`, `segments`,
|
||||
`boarding_passes`) — row-level UPDATE при SCD1 UPSERT
|
||||
- **Heap (явный)**: DDS измерения с UPDATE (`dim_airports`, `dim_airplanes`,
|
||||
@@ -228,7 +228,7 @@ GP-специфичная best practice, которую забывают даж
|
||||
```sql
|
||||
-- 1. Собрать новую партицию во временную таблицу
|
||||
CREATE TABLE tmp_fact_20170102 (LIKE dds.fact_flight_sales)
|
||||
WITH (appendonly=true, orientation=column, compresstype=zlib);
|
||||
WITH (appendonly=true, orientation=column, compresstype=zstd);
|
||||
INSERT INTO tmp_fact_20170102 SELECT ... FROM ods... WHERE flight_date = '2017-01-02';
|
||||
|
||||
-- 2. Атомарно заменить партицию (без DELETE, без UPDATE)
|
||||
@@ -258,11 +258,11 @@ DROP TABLE tmp_fact_20170102;
|
||||
|
||||
| Storage | Таблицы | Почему |
|
||||
|---------|---------|--------|
|
||||
| **AO Column** zlib | `dds.dim_calendar` | Write-once (generate_series), никогда не обновляется. Колоночное хранение идеально для аналитических скан. |
|
||||
| **AO Column** zlib | `dm.route_performance` | Full rebuild (TRUNCATE+INSERT), чисто аналитические чтения. |
|
||||
| **AO Row** zlib | STG: все 9 таблиц | Уже реализовано. Append-only, иммутабельные батчи. |
|
||||
| **AO Row** zlib | ODS snapshot: `airports`, `airplanes`, `routes`, `seats` | Полный snapshot каждый раз. Перевести загрузку с UPSERT на TRUNCATE+INSERT — честнее для семантики «текущий срез». |
|
||||
| **AO Row** zlib | `dds.dim_tariffs` | Только INSERT новых тарифов, UPDATE не используется. |
|
||||
| **AO Column** zstd | `dds.dim_calendar` | Write-once (generate_series), никогда не обновляется. Колоночное хранение идеально для аналитических скан. |
|
||||
| **AO Column** zstd | `dm.route_performance` | Full rebuild (TRUNCATE+INSERT), чисто аналитические чтения. |
|
||||
| **AO Row** zstd | STG: все 9 таблиц | Уже реализовано. Append-only, иммутабельные батчи. Примечание: используем **zstd (level 1)** вместо zlib, так как он обеспечивает более высокую скорость декомпрессии и лучшее сжатие в современных GP-кластерах (6.0+). |
|
||||
| **AO Row** zstd | ODS snapshot: `airports`, `airplanes`, `routes`, `seats` | Полный snapshot каждый раз. Перевести загрузку с UPSERT на TRUNCATE+INSERT — честнее для семантики «текущий срез». |
|
||||
| **AO Row** zstd | `dds.dim_tariffs` | Только INSERT новых тарифов, UPDATE не используется. |
|
||||
| **Heap** (явный) | ODS транзакционные: `bookings`, `tickets`, `flights`, `segments`, `boarding_passes` | Row-level UPDATE при SCD1 UPSERT. Heap обязателен. |
|
||||
| **Heap** (явный) | DDS измерения с UPDATE: `dim_airports`, `dim_airplanes`, `dim_passengers`, `dim_routes` | SCD1/SCD2 UPSERT с row-level UPDATE. |
|
||||
| **Heap** (явный) | `dds.fact_flight_sales` | UPDATE (is_boarded, seat_no меняются). |
|
||||
|
||||
Reference in New Issue
Block a user