Range partitioning (Устаревший)
Range partitioning подходит для хранения простых непрерывных данных, таких как данные временных рядов или непрерывные числовые данные.
На основе range partitioning вы можете создавать partitions с использованием стратегии динамического партиционирования, которая позволяет управлять временем жизни (TTL) partitions.
Обратите внимание, что начиная с версии v1.5.2, expression partitioning дополнительно оптимизирован для унификации всех стратегий партиционирования и поддерживает более сложные решения. Он рекомендуется в большинстве случаев и заменит стратегию range partitioning в будущих релизах.
Введение
Range partitioning подходит для часто запрашиваемых данных на основе непрерывных диапазонов дат/чисел. Кроме того, его можно применять в некоторых особых случаях, когда исторические данные необходимо партиционировать по месяцам, а недавние данные нужно партиционировать по дням.
Вам необходимо явно определить столбцы партиционирования данных и установить отношение сопоставления между partitions и диапазонами значений столбцов партиционирования. Во время загрузки данных Selena назначает данные соответствующим partitions на основе диапазонов, к которым относятся значения столбцов партиционирования данных.
Что касается типа данных столбцов партиционирования, до версии v1.5.2 range partitioning поддерживал только столбцы партиционирования типов date и integer. Начиная с версии v1.5.2, три специфические временные функции могут использоваться как столбцы partition. При явном определении отношения сопоставления между partitions и диапазонами значений столбцов партиционирования вам необходимо сначала использовать специфическую временную функцию для преобразования значений столбцов партиционирования из timestamps ил и strings в значения date, а затем разделить partitions на основе преобразованных значений date.
- Если значение столбца партиционирования является timestamp, вам необходимо использовать функцию from_unixtime или from_unixtime_ms для преобразования timestamp в значение date при разделении partitions. Когда используется функция from_unixtime, столбец партиционирования поддерживает только типы INT и BIGINT. Когда используется функция from_unixtime_ms, столбец партиционирования поддерживает только тип BIGINT.
- Если значение столбца партиционирования является строкой (тип STRING, VARCHAR или CHAR), вам необходимо использовать функцию str2date для преобразования строки в значение date при разделении partitions.
Использование
Синтаксис
PARTITION BY RANGE ( partition_columns | function_expression ) ( single_range_partition | multi_range_partitions )
partition_columns ::=
<column> [, ...]
function_expression ::=
from_unixtime(column)
| from_unixtime_ms(column)
| str2date(column)
single_range_partition ::=
PARTITION <partition_name> VALUES partition_key_desc
partition_key_desc ::=
LESS THAN { MAXVALUE | value_list }
| value_range
-- value_range - это левозамкнутый, правооткрытый интервал. Пример: `[202201, 202212)`.
-- Вы должны явно указать скобку `[` в полуоткрытом интервале.
value_range ::=
[value_list, value_list)
value_list ::=
( <value> [, ...] )
multi_range_partitions ::=
{ PARTITIONS START ("<start_date_value>") END ("<end_date_value>") EVERY ( INTERVAL <int_value> time_unit )
| PARTITIONS START ("<start_integer_value>") END ("<end_integer_value>") EVERY ( <int_value> ) } -- Значения столбцов partition всё равно должны быть заключены в двойные кавычки, даже если значения столбцов partition, указанные в START и END, являются целыми числами. Однако значения интервалов в предложении EVERY не нужно заключать в двойные кавычки.
time_unit ::=
HOUR | DAY | WEEK | MONTH | YEAR
Параметры
| Параметры | Описание |
|---|---|
partition_columns | Имена столбцов партиционирования. Значения столбцов партиционирования могут быть строковыми (BINARY не поддерживается), date или datetime, или целыми числами. |
function_expression | Функциональное выражение, которое преобразует столбец партиционирования в определенные типы данных. Поддерживаемые функции: from_unixtime, from_unixtime_ms и str2date. ПРИМЕЧАНИЕ Range partitioning поддерживает одно и только одно функциональное выражение. |
partition_name | Имя partition. Рекомендуется устанавливать соответствующие имена partitions на основе бизнес-сценария для различения данных в разных partitions. |
Пример
-
Создание partitions путем ручного определения диапазонов значений на основе столбца партиционирования типа date.
PARTITION BY RANGE(date_col)(
PARTITION p1 VALUES LESS THAN ("2020-01-31"),
PARTITION p2 VALUES LESS THAN ("2020-02-29"),
PARTITION p3 VALUES LESS THAN ("2020-03-31")
) -
Создание partitions путем ручного определения диапазонов значений на основе столбца партиционирования типа integer.
PARTITION BY RANGE (int_col) (
PARTITION p1 VALUES LESS THAN ("20200131"),
PARTITION p2 VALUES LESS THAN ("20200229"),
PARTITION p3 VALUES LESS THAN ("20200331")
) -
Создание нескольких partitions с одинаковым интервалом дат.
PARTITION BY RANGE (date_col) (
START ("2021-01-01") END ("2021-01-04") EVERY (INTERVAL 1 DAY)
) -
Создание нескольких partitions с различными интервалами дат.
PARTITION BY RANGE (date_col) (
START ("2019-01-01") END ("2021-01-01") EVERY (INTERVAL 1 YEAR),
START ("2021-01-01") END ("2021-05-01") EVERY (INTERVAL 1 MONTH),
START ("2021-05-01") END ("2021-05-04") EVERY (INTERVAL 1 DAY)
) -
Создание нескольких partitions с одинаковым целочисленным интервалом.
PARTITION BY RANGE (int_col) (
START ("1") END ("10") EVERY (1)
) -
Создание нескольких partitions с различными целочисленными интервалами.
PARTITION BY RANGE (int_col) (
START ("1") END ("10") EVERY (1),
START ("10") END ("100") EVERY (10)
) -
Использование from_unixtime для преобразования столбца partition типа timestamp (string) в тип date.
PARTITION BY RANGE(from_unixtime(timestamp_col)) (
PARTITION p1 VALUES LESS THAN ("2021-01-01"),
PARTITION p2 VALUES LESS THAN ("2021-01-02"),
PARTITION p3 VALUES LESS THAN ("2021-01-03")
) -
Использование str2date для преобразования столбца partition типа string в тип date.
PARTITION BY RANGE(str2date(string_col, '%Y-%m-%d'))(
PARTITION p1 VALUES LESS THAN ("2021-01-01"),
PARTITION p2 VALUES LESS THAN ("2021-01-02"),
PARTITION p3 VALUES LESS THAN ("2021-01-03")
)
Dynamic partitioning
Selena поддерживает динамическое партиционирование, которое может автоматически управлять временем жизни (TTL) partitions, например, партиционирование новых входных данных в таблицах и удаление устаревших partitions. Эта функция значительно снижает затраты на обслуживание.