Часто бывает, что нужно найти последнюю партицию и начать грузить данные со следующей. Пройдемся от банальных вариантов до особенно интересных
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