Партиционирование на основе заранее заданных списков значений¶
Начиная с v3.1, StarRocks поддерживает партицирование на основе списка значений. Данные партиционируются на основе заранее заданных списков значений для каждой партиции, что ускоряет запросы и упрощает управление по перечислимым значениям.
Начиная с v3.4, expression partitioning дополнительно оптимизировано, унифицирует стратегии партиционирования и поддерживает более сложные решения. Рекомендуется в большинстве случаев и в будущих релизах заменит list partitioning.
Введение¶
В каждой партиции необходимо явно указать список значений столбцов. В отличие от Range Partitioning, эти значения не обязаны образовывать непрерывные диапазоны времени или чисел. При загрузке данных StarRocks помещает строки в соответствующие партиции на основе сопоставления значений столбца партиционирования со списками значений, заданными для партиций.

Партицирование на основе списков значений подходит для данных, где столбцы содержат небольшое число enum‑значений, и вы часто запрашиваете или управляете данными по этим значениям. Примеры: география, статусы, категории. Каждое значение представляет отдельную категорию. Партиционирование по enum‑значениям повышает производительность запросов и упрощает администрирование.
Партицирование на основе списков значений особенно полезно, когда одной партиции требуется включать несколько значений для каждого столбца партиционирования. Например, если в таблице есть столбец City и вы часто запрашиваете данные по штатам и городам, при создании таблицы можно выбрать City как столбец партиционирования и указать, что данные по нескольким городам одного штата помещаются в одну партицию, например: PARTITION pCalifornia VALUES IN ("Los Angeles", "San Francisco", "San Diego"). Это ускоряет запросы по штатам/городам и упрощает управление.
Если партиция должна содержать только одно значение каждого столбца партиционирования, используйте expression partitioning.
Сравнение видов партицироания
Главное отличие: для list partitioning партиции создаются вручную; для expression partitioning партиции создаются автоматически во время загрузки. В большинстве случаев expression partitioning может заменить list partitioning. Сравнение:
Метод партиционирования |
List partitioning |
Expression partitioning |
|---|---|---|
Синтаксис |
|
|
Несколько значений для каждого столбца в одной партиции |
Поддерживается. Одна партиция может включать разные значения каждого столбца. Например, при значениях |
Не поддерживается. Партиция хранит данные только с одним значением в столбце партиционирования. Например, |
Создание партиций до загрузки |
Требуется |
Не требуется — создаются автоматически при загрузке |
Автоматическое создание партиций при загрузке |
Не поддерживается — при отсутствии подходящей партиции загрузка завершится ошибкой |
Поддерживается — при отсутствии подходящей партиции StarRocks создаст её автоматически; каждая партиция содержит только одно значение столбца |
SHOW CREATE TABLE |
Возвращает определение партиций в CREATE TABLE |
Возвращает только |
Использование¶
Синтаксис¶
PARTITION BY LIST (partition_columns) (
PARTITION <partition_name> VALUES IN (value_list)
[, ...]
)
partition_columns::=
<column> [,<column> [, ...] ]
value_list::=
value_item [, value_item [, ...] ]
value_item::=
{ <value> | ( <value> [, <value>, [, ...] ] ) }
Параметры¶
Параметр |
Обязателен |
Описание |
|---|---|---|
|
ДА |
Имена столбцов партиционирования. Допустимые типы значений: строки (кроме BINARY), дата/дата‑время, целые, boolean. Начиная с v3.3.3, допускаются |
|
ДА |
Имя партиции. Рекомендуется подбирать осмысленные имена для различения данных. |
|
ДА |
Список значений столбцов партиционирования, попадающих в партицию. |
Примеры¶
Пример 1. Частые запросы по штатам/городам. При создании таблицы выберите столбец city и определите партиции, включающие города конкретных штатов:
CREATE TABLE t_recharge_detail1 (
id bigint,
user_id bigint,
recharge_money decimal(32,2),
city varchar(20) not null,
dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY LIST (city) (
PARTITION pLos_Angeles VALUES IN ("Los Angeles"),
PARTITION pSan_Francisco VALUES IN ("San Francisco")
)
DISTRIBUTED BY HASH(`id`);
Пример 2. Частые запросы по времени и городам. Укажите в качестве столбцов партиционирования dt и city, чтобы данные конкретной даты и города лежали в одной партиции:
CREATE TABLE t_recharge_detail4 (
id bigint,
user_id bigint,
recharge_money decimal(32,2),
city varchar(20) not null,
dt varchar(20) not null
) ENGINE=OLAP
DUPLICATE KEY(id)
PARTITION BY LIST (dt,city) (
PARTITION p202204_California VALUES IN (
("2022-04-01", "Los Angeles"),
("2022-04-01", "San Francisco"),
("2022-04-02", "Los Angeles"),
("2022-04-02", "San Francisco")
),
PARTITION p202204_Texas VALUES IN (
("2022-04-01", "Houston"),
("2022-04-01", "Dallas"),
("2022-04-02", "Houston"),
("2022-04-02", "Dallas")
)
)
DISTRIBUTED BY HASH(`id`);
Ограничения¶
Партицирование на основе списка значений поддерживает динамическое партиционирование и пакетное создание нескольких партиций.
В настоящий момент режим
shared‑dataне поддерживает эту возможность.При удалении партиции, созданной через
list partitioning, командойALTER TABLE <table_name> DROP PARTITION <partition_name>;данные в ней удаляются без возможности восстановления.Начиная с v3.4.0, v3.3.8, v3.2.13 и v3.1.16 поддерживаются backup/restore таблиц с
list partitioning.Начиная с v3.3.5 поддерживается создание асинхронных материализованных представлений по базовым таблицам с list partitioning.