Перейти к основному содержимому

Динамическое партиционирование

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. Временная гранулярность определяет формат суффикса для динамически создаваемых партиций.
  • Если значение HOUR, столбец партиционирования может быть только типа DATETIME и не может быть типа DATE. Формат суффикса для динамически создаваемых партиций: yyyyMMddHH, например, 2020032101.
  • Если значение DAY, формат суффикса для динамически создаваемых партиций: yyyyMMdd. Пример суффикса имени партиции: 20200321.
  • Если значение WEEK, формат суффикса для динамически создаваемых партиций: yyyy_ww, например 2020_13 для 13-й недели 2020 года.
  • Если значение MONTH, формат суффикса для динамически создаваемых партиций: yyyyMM, например 202003.
  • Если значение YEAR, формат суффикса для динамически создаваемых партиций: yyyy, например 2020.
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 для изменения других свойств таблицы.