Динамическое партиционирование
Selena поддерживает динамическое партиционирование, которое может автоматически управлять временем жизни (TTL) партиций, например, разделять новые входящие данные в таблицах и удалять устаревшие партиции. Эта функция значительно снижает затраты на обслуживание.
Включение динамического партиционирования
Возьмем таблицу site_access в качестве примера. Чтобы включить динамическое партиционирование, необходимо настроить параметр PROPERTIES. Информацию о параметрах конфигурации см. в CREATE TABLE.
CREATE TABLE site_access(
event_day DATE,
site_id INT DEFAULT '10',
city_code VARCHAR(100),
user_name VARCHAR(32) DEFAULT '',
pv BIGINT DEFAULT '0'
)
DUPLICATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY RANGE(event_day)(
PARTITION p20200321 VALUES LESS THAN ("2020-03-22"),
PARTITION p20200322 VALUES LESS THAN ("2020-03-23"),
PARTITION p20200323 VALUES LESS THAN ("2020-03-24"),
PARTITION p20200324 VALUES LESS THAN ("2020-03-25")
)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES(
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32",
"dynamic_partition.history_partition_num" = "0"
);
PROPERTIES:
| параметр | обязательный | описание |
|---|---|---|
| dynamic_partition.enable | Нет | Включает динамическое партиционирование. Допустимые значения: TRUE и FALSE. Значение по умолчанию: TRUE. |
| dynamic_partition.time_unit | Да | Временная гранулярность для динамически создаваемых партиций. Это обязательный параметр. Допустимые значения: HOUR, DAY, WEEK, MONTH и YEAR. Временная гранулярность определяет формат суффикса для динамически создаваемых партиций.
|
| dynamic_partition.time_zone | Нет | Часовой пояс для динамических партиций, который по умолчанию совпадает с системным часовым поясом. |
| dynamic_partition.start | Нет | Начальное смещение динамического партиционирования. Значение этого параметра должно быть отрицательным целым числом. Партиции до этого смещения будут удалены на основе текущего дня, недели или месяца, что определяется значением параметра dynamic_partition.time_unit. Значение по умолчанию: Integer.MIN_VALUE, а именно -2147483648, что означает, что исторические партиции не будут удаляться. |
| dynamic_partition.end | Да | Конечное смещение динамического партиционирования. Значение этого параметра должно быть положительным целым числом. Партиции от текущего дня, недели или месяца до конечного смещения будут созданы заранее. |
| dynamic_partition.prefix | Нет | Префикс, добавляемый к именам динамических партиций. Значение по умолчанию: p. |
| dynamic_partition.buckets | Нет | Количество корзин на динамическую партицию. Значение по умолчанию совпадает с количеством корзин, определенным зарезервированным словом BUCKETS или автоматически установленным Selena. |
| dynamic_partition.history_partition_num | Нет | Количество исторических партиций, созданных механизмом динамического партиционирования, со значением по умолчанию 0. Когда значение больше 0, исторические партиции создаются заранее. Начиная с версии 1.5.0, Selena поддерживает этот параметр. |
| dynamic_partition.start_day_of_week | Нет | Когда dynamic_partition.time_unit равен WEEK, этот параметр используется для указания первого дня каждой недели. Допустимые значения: от 1 до 7. 1 означает понедельник, а 7 означает воскресенье. Значение по умолчанию: 1, что означает, что каждая неделя начинается в понедельник. |
| dynamic_partition.start_day_of_month | Нет | Когда dynamic_partition.time_unit равен MONTH, этот параметр используется для указания первого дня каждого месяца. Допустимые значения: от 1 до 28. 1 означает 1-е число каждого месяца, а 28 означает 28-е число каждого месяца. Значение по умолчанию: 1, что означает, что каждый месяц начинается с 1-го числа. Первый день не может быть 29-м, 30-м или 31-м. |
| dynamic_partition.replication_num | Нет | Количество реплик для tablet в динамически создаваемых партициях. Значение по умолчанию совпадает с количеством реплик, настроенным при создании таблицы. |
Когда столбец партиции имеет тип INT, его формат должен быть yyyyMMdd, независимо от гранулярности времени партиции.
Конфигурация FE:
dynamic_partition_check_interval_seconds: интервал для планирования динамического партиционирования. Значение по умолчанию: 600 секунд, что означает, что ситуация с партициями проверяется каждые 10 минут, чтобы увидеть, соответствуют ли партиции условиям динамического партиционирования, указанным в PROPERTIES. Если нет, партиции будут созданы и удалены автоматически.
Просмотр партиций
После включения динамических партиций для таблицы входящие данные непрерывно и автоматически разделяются. Вы можете просмотреть текущие партиции, используя следующий оператор. Например, если текущая дата 2020-03-25, вы можете видеть только партиции в диапазоне времени от 2020-03-25 до 2020-03-28.
SHOW PARTITIONS FROM site_access;
[types: [DATE]; keys: [2020-03-25]; ‥types: [DATE]; keys: [2020-03-26]; )
[types: [DATE]; keys: [2020-03-26]; ‥types: [DATE]; keys: [2020-03-27]; )
[types: [DATE]; keys: [2020-03-27]; ‥types: [DATE]; keys: [2020-03-28]; )
[types: [DATE]; keys: [2020-03-28]; ‥types: [DATE]; keys: [2020-03-29]; )
Если вы хотите создать исторические партиции при создании таблицы, необходимо указать dynamic_partition.history_partition_num, чтобы определить количество исторических партиций для создания. Например, если вы установите dynamic_partition.history_partition_num в 3 при создании таблицы и текущая дата 2020-03-25, вы увидите только партиции в диапазоне времени от 2020-03-22 до 2020-03-28.
SHOW PARTITIONS FROM site_access;
[types: [DATE]; keys: [2020-03-22]; ‥types: [DATE]; keys: [2020-03-23]; )
[types: [DATE]; keys: [2020-03-23]; ‥types: [DATE]; keys: [2020-03-24]; )
[types: [DATE]; keys: [2020-03-24]; ‥types: [DATE]; keys: [2020-03-25]; )
[types: [DATE]; keys: [2020-03-25]; ‥types: [DATE]; keys: [2020-03-26]; )
[types: [DATE]; keys: [2020-03-26]; ‥types: [DATE]; keys: [2020-03-27]; )
[types: [DATE]; keys: [2020-03-27]; ‥types: [DATE]; keys: [2020-03-28]; )
[types: [DATE]; keys: [2020-03-28]; ‥types: [DATE]; keys: [2020-03-29]; )
Изменение свойств динамического партиционирования
Вы можете использовать оператор ALTER TABLE для изменения свойств динамического партиционирования, например, для отключения динамического партиционирования. Возьмем следующий оператор в качестве примера.
ALTER TABLE site_access
SET("dynamic_partition.enable"="false");
Примечание:
- Чтобы проверить свойства динамического партиционирования таблицы, выполните оператор SHOW CREATE TABLE.
- Вы также можете использовать оператор ALTER TABLE для изменения других свойств таблицы.