Ответ
Партиционированные таблицы в HDFS хранятся в виде иерархии директорий, где каждая директория соответствует уникальному значению партиционирующего столбца. Это позволяет Hive, Spark и другим инструментам эффективно фильтровать данные на уровне файловой системы.
Типичная структура каталогов:
/user/hive/warehouse/sales_db/transactions/
├── year=2023/
│ ├── month=01/
│ │ └── part-00000.parquet
│ ├── month=02/
│ │ └── part-00000.parquet
│ └── month=03/
│ └── part-00000.parquet
└── year=2024/
├── month=01/
│ └── part-00000.parquet
└── month=02/
└── part-00000.parquet
Практический пример создания в Hive:
CREATE EXTERNAL TABLE transactions (
transaction_id BIGINT,
customer_id INT,
amount DECIMAL(10,2),
product_code STRING
)
PARTITIONED BY (year INT, month INT)
STORED AS PARQUET
LOCATION '/user/hive/warehouse/sales_db/transactions/';
Ключевые преимущества:
- Производительность запросов: При фильтрации по
year=2023 AND month=01система читает только файлы из директории/year=2023/month=01/, исключая сканирование всех данных. - Управление жизненным циклом: Устаревшие партиции (например, за старый год) можно быстро удалить как целые директории командой
ALTER TABLE transactions DROP PARTITION (year=2020);. - Гибкость форматов: Данные внутри партиций могут храниться в различных колоночных форматах (Parquet, ORC), что оптимизирует хранение и чтение.