➗Вообще партицирование/партиционирование - это метод разделения большой таблицы на маленькие кусочки для оптимизации обращения к ним. Часто партицируют по дате или по полю с небольшим конечным множеством значений. В HDFS они выглядят как подпапочки внутри одной папки:
hdfs://data/web/visits/ - вся таблицаhdfs://data/web/visits/visit_date=2024-03-01 - конкретная партицияА уже внутри этого пути лежат паркет-файлики вида part-23001-b484-8348bde71.c000.parquet
Как эффективно достать данные из партицированной таблицы?
У нас есть табличка visits в схеме web, и она партицирована по дате. Нужно вытащить максимальную дату.
Самый простой способ - написать запрос:
spark.table("web.visits")
.select(max("visit_date"))
.show() Но мы также можем воспользоваться преимуществами Hive и сделать так:
spark.sql("SHOW PARTITIONS web.visits")
.select(max("partition"))
.show()В результате show partitions у нас появляется одно поле partition:
+----------+
|partition |
+----------+
|2024-03-01|
|2024-02-26|
+----------+
В первом случае мы должны пробежаться по куче данных и агрегировать. Во втором у нас всего лишь небольшой список, так что этот метод в разы быстрее🍊
#spark