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