Сегменты и партиции. В чём различие?

Сегменты и партиции. В чём различие?

О сегментах и партициях

Сегмент – блок таблицы данных, полученный путём отбора строк по заданному уникальному значению ключа сегментирования. Сегментирование происходит логически: деление на блоки позволяет удалить соответствующую группу записей и заменить её новыми, обеспечивая инкрементальность данных.

Партиция – физическая часть таблицы данных, выделенная для удобства хранения и обработки. Таблица, разбитая на партиции, называется партицированной. Партицирование поддерживается для PostgreSQL и ClickHouse.

Как работают сегменты

Для наглядности создадим проект для выгрузки данных с сегментированием. Выгрузим выручку и себестоимость продаж. Разделим данные по периоду:

image-20260522-171351.png

Выберем несколько полей, настроим таблицу, как обычно, и на этапе маппинга укажем параметры для сегментирования. Необходимо отметить эти поля флагами (галочками):

image-20260522-171410.png

В то же время настройки партиций пока оставляем пустыми:

image-20260522-171438.png

Способ обновления в настройках строки при этом установится в “Обновление сегмента”.

Выполним выгрузку. Таблица выгружается с заданными полями. Чтобы понять, какие строки удаляются для обновления сегмента, используется поиск по индексируемому полю “ПараметрПериод”:

image-20260522-171527.png

То есть сегмент удаляется, а вместо него добавляется новый. Так работают сегменты.

Как работают партиции

Теперь разберем, что такое партиции и как они функционируют.

Изменим наш проект. Уберем флаг сегмента у параметра, а вместо сегментирования зададим партицирование на этапе расширенных настроек:

image-20260522-171942.png

Затем поменяем способ обновления на “Перезапись партиции” в настройках строки проекта.

Что происходит в этом случае?

При партицировании таблица физически разбивается на несколько файлов на диске. При обновлении партиция удаляется целиком (команда drop partition), после чего данные записываются заново. Каждый файл в директории данных СУБД хранит отдельную партицию.

Заключение

Основное отличие: сегмент – индексируемое поле (логическое деление), партиция – физические файлы (физическое деление). При работе с партициями запрос SELECT открывает все файлы таблицы, что при большом числе партиций может достичь ограничений файловой системы. При сегментировании открывается один файл с поиском по индексу – это быстрее.


Смотрите также

Справочник понятий и концепций
Интеграция с "1С:Предприятие"