Замена show partitions

Часто бывает, что нужно найти последнюю партицию и начать грузить данные со следующей. Пройдемся от банальных вариантов до особенно интересных

1️⃣ max(date) - самое ресурсозатратное, потому что нужно пробежаться по всей таблице

2️⃣ show partitions - отличный способ, пробегаемся только по метаданным

Другие 2 варианта подойдут для айсберга:

3️⃣ raw.my_table.partitions - в айсберге есть много системных мета-таблиц, таблица с партициями выглядит так:

-RECORD 0------------------------------------------- partition | {2025-03-29 00:00:00} spec_id | 0 record_count | 7251 file_count | 1 total_data_file_size_in_bytes | 91062 position_delete_record_count | 0 position_delete_file_count | 0 equality_delete_record_count | 0 equality_delete_file_count | 0 last_updated_at | 2025-11-20 12:25:48.678 last_updated_snapshot_id | 5910543042911865752 only showing top 1 row

Это как аналог show partitions: идем в табличку и отбираем max(partition)

4️⃣ TBLPROPERTIES - тут обсудим подробнее

Пусть таблица партицируется по другим полям или не партицируется вообще. Тогда в момент загрузки можно проставить любое свойство:

ALTER TABLE raw.my_table SET TBLPROPERTIES ('raw.last-date' = '2025-12-05');

Их может быть несколько, посмотрим на текущий список:

SHOW TBLPROPERTIES raw.my_table

Сюда добавилось наше кастомное свойство:

+-------------------------------+-----------------+ |key |value | +-------------------------------+-----------------+ |current-snapshot-id |63675018113182479| |format |iceberg/PARQUET | |format-version |2 | |raw.last-date |2025-12-05 | |write.format.default |PARQUET | |write.parquet.compression-codec|zstd | +-------------------------------+-----------------+

Убрать свойство можно так:

ALTER TABLE raw.my_table UNSET TBLPROPERTIES('raw.last-date');

Каждое изменение свойства будет создавать новый файл с метой - а это доп расходы на хранение и куча разных версий одной и той же таблицы. Поэтому сначала проанализируйте, какой метод будет подходить именно для ваших данных и ресурсов

@data_engineerette