Распределение данных (distribution) в Greenplum предполагает хранение данных таблицы на различных сегментах кластера. habr.com Сегменты представляют собой инстансы PostgreSQL, поднятые на сервере. habr.com На одном сервере может быть несколько сегментов Greenplum. habr.com
Для каждой таблицы задаётся своя политика распределения. idyakonoff.ru Существуют несколько её видов: idyakonoff.ru
- DISTRIBUTED BY (column(-s)) — хеш-распределение. habr.com Конкретный сегмент выбирается на основе хешей, которые рассчитываются по указанным полям. habr.com Рекомендуется использовать для таблиц, имеющих первичные ключи (PRIMARY KEY) либо столбцы с уникальными значениями (UNIQUE). habr.com docs.arenadata.io
- DISTRIBUTED REPLICATED — распределение данных, при котором копия таблицы сохраняется на каждом сегменте кластера. habr.com Рекомендуется для небольших таблиц (например, для справочника валют и т. д.). habr.com Позволяет избежать любых перемещений данных при JOIN-запросах. habr.com
- DISTRIBUTED RANDOMLY — случайное распределение данных с использованием алгоритма round-robin. habr.com docs.arenadata.io Поскольку система выбирает сегменты случайным образом, равномерность распределения данных между ними не гарантируется. habr.com docs.arenadata.io Рекомендуется для случаев, когда в таблицах нет столбцов с уникальными значениями, а размер таблиц достаточно большой. habr.com docs.arenadata.io
Оптимальное, то есть равномерное, распределение данных — самый важный фактор в Greenplum. bigdataschool.ru Если данные неравномерно распределены, сегменты с большим количеством данных будут выполняться дольше. bigdataschool.ru Поэтому каждый сегмент должен иметь примерно равное количество строк и выполнять примерно одинаковый объём обработки. bigdataschool.ru