Замена 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