Партиционирование на основе заранее заданных списков значений

Начиная с v3.1, StarRocks поддерживает партицирование на основе списка значений. Данные партиционируются на основе заранее заданных списков значений для каждой партиции, что ускоряет запросы и упрощает управление по перечислимым значениям.

Начиная с v3.4, expression partitioning дополнительно оптимизировано, унифицирует стратегии партиционирования и поддерживает более сложные решения. Рекомендуется в большинстве случаев и в будущих релизах заменит list partitioning.

Введение

В каждой партиции необходимо явно указать список значений столбцов. В отличие от Range Partitioning, эти значения не обязаны образовывать непрерывные диапазоны времени или чисел. При загрузке данных StarRocks помещает строки в соответствующие партиции на основе сопоставления значений столбца партиционирования со списками значений, заданными для партиций.

list_partitioning

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

Синтаксис

PARTITION BY LIST (partition_columns)(    PARTITION <partition_name> VALUES IN (value_list)    [, ...] )

PARTITION BY <partition_columns>

Несколько значений для каждого столбца в одной партиции

Поддерживается. Одна партиция может включать разные значения каждого столбца. Например, при значениях Los Angeles, San Francisco, San Diego в столбце city все данные попадут в одну партицию pCalifornia:
PARTITION BY LIST (city) (    PARTITION pCalifornia VALUES IN ("Los Angeles","San Francisco","San Diego")    [, ...] )

Не поддерживается. Партиция хранит данные только с одним значением в столбце партиционирования. Например, PARTITION BY (city) приведёт к автоматическому созданию трёх партиций pLosAngeles, pSanFrancisco, pSanDiego для приведённого примера.

Создание партиций до загрузки

Требуется

Не требуется — создаются автоматически при загрузке

Автоматическое создание партиций при загрузке

Не поддерживается — при отсутствии подходящей партиции загрузка завершится ошибкой

Поддерживается — при отсутствии подходящей партиции StarRocks создаст её автоматически; каждая партиция содержит только одно значение столбца

SHOW CREATE TABLE

Возвращает определение партиций в CREATE TABLE

Возвращает только PARTITION BY (partition_columns); автоматически созданные партиции не отображаются. Чтобы увидеть их, используйте SHOW PARTITIONS FROM <table_name>

Использование

Синтаксис

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>, [, ...] ] ) }

Параметры

Параметр

Обязателен

Описание

partition_columns

ДА

Имена столбцов партиционирования. Допустимые типы значений: строки (кроме BINARY), дата/дата‑время, целые, boolean. Начиная с v3.3.3, допускаются NULL.

partition_name

ДА

Имя партиции. Рекомендуется подбирать осмысленные имена для различения данных.

value_list

ДА

Список значений столбцов партиционирования, попадающих в партицию.

Примеры

Пример 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.