← Назад к вопросам

Как выглядят партиции с датой 2024-08-30?

2.0 Middle🔥 121 комментариев
#ETL и качество данных#Форматы данных и хранение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура партиций с датой 2024-08-30

Партиции с датой — это способ физического разделения данных на файловой системе или в БД, основанный на временных интервалах. Партиция для даты 2024-08-30 может быть структурирована несколькими способами в зависимости от выбранной схемы партиционирования.

1. Партиции по году/месяцу/дню (самый частый вариант)

/data/events/
└── year=2024/
    └── month=08/
        └── day=30/
            ├── events_part1.parquet
            ├── events_part2.parquet
            └── _SUCCESS

Структура:

/warehouse/events/year=2024/month=08/day=30/
time_created=2024-08-30 12:34:56 | user_id=123 | amount=99.50
time_created=2024-08-30 15:22:11 | user_id=456 | amount=150.00
...

Пример Parquet файла:

part-00000-abcd1234.parquet (128 MB)
part-00001-efgh5678.parquet (128 MB)
part-00002-ijkl9012.parquet (64 MB)

2. Партиции по году/неделе

/data/events/
└── year=2024/
    └── week=35/           # 35-я неделя года (день августа 30 — это неделя 35)
        ├── events.parquet
        └── _SUCCESS

Август 30, 2024 — это 35-я неделя в году (ISO-8601).

3. Партиции по году/квартали

/data/events/
└── year=2024/
    └── quarter=3/         # 3-й квартал (июль-сентябрь)
        ├── events.parquet
        └── _SUCCESS

Август — месяц 3-го квартала, поэтому файл попадёт в quarter=3.

4. Партиции только по дате (без иерархии)

/data/events/
└── date=2024-08-30/
    ├── events_00000.parquet
    └── _SUCCESS

Это менее структурировано, но может использоваться для малых объёмов или простых случаев.

5. Пример в Spark DataFrame

import pyspark.sql.functions as F
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Partitioning").getOrCreate()

# Читаем данные
df = spark.read.parquet("/data/events/year=2024/month=08/day=30/")

# Или создаём партиции
df.write \
    .mode("overwrite") \
    .partitionBy("year", "month", "day") \
    .parquet("/data/events_partitioned/")

# Результат: структура как выше

6. Метаданные партиции

Если система поддерживает каталоги метаданных (Hive Metastore):

SHOW PARTITIONS events;

-- Output:
year=2024, month=08, day=29
year=2024, month=08, day=30  ← Именно эта партиция
year=2024, month=08, day=31

-- Количество строк в партиции 2024-08-30
SELECT COUNT(*) FROM events 
WHERE year=2024 AND month=08 AND day=30;

7. Оптимизация запроса с такой партицией

# Плохо: сканирует все партиции за 2024 год
df_bad = spark.read.parquet("/data/events/year=2024/month=08/")
result = df_bad.filter((F.year(F.col("timestamp")) == 2024) & 
                       (F.month(F.col("timestamp")) == 8) &
                       (F.day(F.col("timestamp")) == 30))

# Хорошо: читает только нужную партицию (partition pruning)
df_good = spark.read.parquet("/data/events/year=2024/month=08/day=30/")

По партиции /year=2024/month=08/day=30/ прямое обращение может быть 100x быстрее.

8. Размер файлов в такой партиции

Типичный размер одного дня данных:

/data/events/year=2024/month=08/day=30/
├── part-00000.parquet (512 MB)
├── part-00001.parquet (512 MB)
├── part-00002.parquet (256 MB)
└── _SUCCESS (0 bytes)

Общий размер: ~1.3 GB для одного дня (зависит от объёма данных).

9. Как создать партицию вручную в SQL

-- В Hive/Spark SQL
ALTER TABLE events ADD PARTITION (
    year=2024, 
    month=08, 
    day=30
) LOCATION /data/events/year=2024/month=08/day=30/;

-- Удаление старых партиций (например, старше 90 дней)
ALTER TABLE events DROP PARTITION (
    year=2024, 
    month=05, 
    day=15
);

Заключение

Партиция для даты 2024-08-30 обычно структурируется как /year=2024/month=08/day=30/ с несколькими Parquet файлами внутри. Это позволяет системе быстро находить и читать данные за конкретный день без сканирования всего датасета. Правильное партиционирование по дате — одна из основных оптимизаций в Data Engineering.

Как выглядят партиции с датой 2024-08-30? | PrepBro