Перейти к основному содержимому
Версия: 2.0.x

Expression partitioning (рекомендуется)

Начиная с версии v1.5.2, Selena поддерживает expression partitioning (ранее известное как автоматическое партиционирование), которое является более гибким и удобным для пользователя. Этот метод партиционирования подходит для большинства сценариев, таких как запрос и управление данными на основе непрерывных временных диапазонов или значений ENUM.

Вам нужно лишь указать простое выражение partition при создании таблицы. Во время загрузки данных Selena будет автоматически создавать partitions на основе данных и правила, определенного в выражении partition. Вам больше не нужно вручную создавать множество partitions при создании таблицы или настраивать свойства динамических partitions.

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

Начиная с версии v1.5.2, Selena поддерживает слияние expression partitions на основе временных функций для оптимизации эффективности хранения и производительности запросов. Подробную информацию см. в разделе Слияние expression partitions.

Партиционирование на основе простого выражения временной функции

Если вы часто запрашиваете и управляете данными на основе непрерывных временных диапазонов, вам нужно лишь указать столбец типа date (DATE или DATETIME) в качестве столбца partition и указать год, месяц, день или час в качестве гранулярности partition в выражении временной функции. Selena автоматически создаст partitions и установит даты начала и окончания partitions или datetime на основе загруженных данных и выражения partition.

Однако в некоторых особых сценариях, таких как партиционирование исторических данных в partitions по месяцам, а недавних данных в partitions по дням, вы должны использовать range partitioning для создания partitions.

примечание

Обратите внимание, что PARTITION BY date_trunc(column) и PARTITION BY time_slice(column) считаются range partitioning, несмотря на их формат expression partitioning. Поэтому вы можете использовать оператор ALTER TABLE ... ADD PARTITION для range partitions, чтобы добавлять новые partitions к таблицам, использующим такие стратегии партиционирования.

Синтаксис

PARTITION BY expression
...
[ PROPERTIES( { 'partition_live_number' = 'xxx' | 'partition_retention_condition' = 'expr' } ) ]

expression ::=
{ date_trunc ( <time_unit> , <partition_column> ) |
time_slice ( <partition_column> , INTERVAL <N> <time_unit> [ , boundary ] ) }

Параметры

expression

Обязательный: ДА
Описание: Простое выражение временной функции, использующее функции date_trunc или time_slice. Если вы используете функцию time_slice, вам не нужно передавать параметр boundary. Это связано с тем, что в этом сценарии значением по умолчанию и допустимым значением для этого параметра является floor, и значение не может быть ceil.

time_unit

Обязательный: ДА
Описание: Гранулярность partition, которая может быть hour, day, month или year. Гранулярность partition week не поддерживается. Если гранулярность partition - hour, столбец partition должен иметь тип данных DATETIME и не может быть типа DATE.

partition_column

Обязательный: ДА
Описание: Имя столбца partition.

  • Столбец partition может быть только типа DATE или DATETIME. Столбец partition допускает значения NULL.
  • Столбец partition может быть типа DATE или DATETIME, если используется функция date_trunc. Столбец partition должен быть типа DATETIME, если используется функция time_slice.
  • Если столбец partition имеет тип DATE, поддерживаемый диапазон - [0000-01-01 ~ 9999-12-31]. Если столбец partition имеет тип DATETIME, поддерживаемый диапазон - [0000-01-01 01:01:01 ~ 9999-12-31 23:59:59].
  • В настоящее время вы можете указать только один столбец partition; множественные столбцы partition не поддерживаются.

partition_live_number

Обязательный: НЕТ
Описание: Количество последних partitions, которые необходимо сохранить. Partitions сортируются в хронологическом порядке, с текущей датой в качестве эталона; partitions старше текущей даты минус partition_live_number удаляются. Selena планирует задачи для управления количеством partitions, и интервал планирования может быть настроен через динамический параметр FE dynamic_partition_check_interval_seconds, который по умолчанию составляет 600 секунд (10 минут). Предположим, что текущая дата - 4 апреля 2023 года, partition_live_number установлен в 2, и partitions включают p20230401, p20230402, p20230403, p20230404. Partitions p20230403 и p20230404 сохраняются, а другие partitions удаляются. Если загружены грязные данные, такие как данные с будущих дат 5 и 6 апреля, partitions включают p20230401, p20230402, p20230403, p20230404, p20230405 и p20230406. Тогда partitions p20230403, p20230404, p20230405 и p20230406 сохраняются, а другие partitions удаляются.

partition_retention_condition

Начиная с версии v1.5.2, нативные таблицы Selena поддерживают Common Partition Expression TTL.

partition_retention_condition: Выражение, которое объявляет partitions, которые должны быть динамически сохранены. Partitions, которые не соответствуют условию в выражении, будут регулярно удаляться. Пример: 'partition_retention_condition' = 'dt >= CURRENT_DATE() - INTERVAL 3 MONTH'.

  • Выражение может содержать только столбцы partition и константы. Столбцы, не являющиеся столбцами partition, не поддерживаются.
  • Common Partition Expression применяется к List partitions и Range partitions по-разному:
    • Для таблиц с List partitions Selena поддерживает удаление partitions, отфильтрованных Common Partition Expression.
    • Для таблиц с Range partitions Selena может фильтровать и удалять partitions только с использованием возможности partition pruning FE. Partitions, соответствующие предикатам, которые не поддерживаются partition pruning, не могут быть отфильтрованы и удалены.

Примечания по использованию

  • Во время загрузки данных Selena автоматически создает некоторые partitions на основе загруженных данных, но если задание загрузки завершается неудачей по какой-либо причине, partitions, автоматически созданные Selena, не могут быть автоматически удалены.
  • Selena устанавливает максимальное количество автоматически создаваемых partitions для одной загрузки по умолчанию в 4096, что можно настроить через параметр FE auto_partition_max_creation_number_per_load. Этот параметр может предотвратить случайное создание слишком большого количества partitions.
  • Правило именования для partitions согласовано с правилом именования для динамического партиционирования.

Примеры

Пример 1: Предположим, вы часто запрашиваете данные по дням. Вы можете использовать выражение partition date_trunc() и установить столбец partition как event_day, а гранулярность partition как day при создании таблицы. Данные автоматически партиционируются на основе дат во время загрузки. Данные одного дня хранятся в одном partition, и partition pruning может быть использован для значительного повышения эффективности запросов.

CREATE TABLE site_access1 (
event_day DATETIME NOT NULL,
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 date_trunc('day', event_day)
DISTRIBUTED BY HASH(event_day, site_id);

Например, когда загружаются следующие две строки данных, Selena автоматически создаст два partitions, p20230226 и p20230227, с диапазонами [2023-02-26 00:00:00, 2023-02-27 00:00:00) и [2023-02-27 00:00:00, 2023-02-28 00:00:00) соответственно. Если последующие загруженные данные попадают в эти диапазоны, они автоматически направляются в соответствующие partitions.

-- вставка двух строк данных
INSERT INTO site_access1
VALUES ("2023-02-26 20:12:04",002,"New York","Sam Smith",1),
("2023-02-27 21:06:54",001,"Los Angeles","Taylor Swift",1);

-- просмотр partitions
mysql > SHOW PARTITIONS FROM site_access1;
+-------------+---------------+----------------+---------------------+--------------------+--------+--------------+------------------------------------------------------------------------------------------------------+--------------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
| PartitionId | PartitionName | VisibleVersion | VisibleVersionTime | VisibleVersionHash | State | PartitionKey | Range | DistributionKey | Buckets | ReplicationNum | StorageMedium | CooldownTime | LastConsistencyCheckTime | DataSize | IsInMemory | RowCount |
+-------------+---------------+----------------+---------------------+--------------------+--------+--------------+------------------------------------------------------------------------------------------------------+--------------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
| 17138 | p20230226 | 2 | 2023-07-19 17:53:59 | 0 | NORMAL | event_day | [types: [DATETIME]; keys: [2023-02-26 00:00:00]; ..types: [DATETIME]; keys: [2023-02-27 00:00:00]; ) | event_day, site_id | 6 | 3 | HDD | 9999-12-31 23:59:59 | NULL | 0B | false | 0 |
| 17113 | p20230227 | 2 | 2023-07-19 17:53:59 | 0 | NORMAL | event_day | [types: [DATETIME]; keys: [2023-02-27 00:00:00]; ..types: [DATETIME]; keys: [2023-02-28 00:00:00]; ) | event_day, site_id | 6 | 3 | HDD | 9999-12-31 23:59:59 | NULL | 0B | false | 0 |
+-------------+---------------+----------------+---------------------+--------------------+--------+--------------+------------------------------------------------------------------------------------------------------+--------------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
2 rows in set (0.00 sec)

Пример 2: Если вы хотите реализовать управление жизненным циклом partitions, то есть сохранять только определенное количество недавних partitions и удалять исторические partitions, вы можете использовать свойство partition_live_number для указания количества partitions, которые необходимо сохранить.

CREATE TABLE site_access2 (
event_day DATETIME NOT NULL,
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 date_trunc('month', event_day)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES(
"partition_live_number" = "3" -- сохраняет только последние три partitions
);

Пример 3: Предположим, вы часто запрашиваете данные по неделям. Вы можете использовать выражение partition time_slice() и установить столбец partition как event_day, а гранулярность partition как семь дней при создании таблицы. Данные одной недели хранятся в одном partition, и partition pruning может быть использован для значительного повышения эффективности запросов.

CREATE TABLE site_access(
event_day DATETIME NOT NULL,
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 time_slice(event_day, INTERVAL 7 day)
DISTRIBUTED BY HASH(event_day, site_id)

Партиционирование на основе выражения столбца (начиная с v1.5.2)

Если вы часто запрашиваете и управляете данными определенного типа, вам нужно лишь указать столбец, представляющий тип, в качестве столбца partition. Selena автоматически создаст partitions на основе значений столбца partition загруженных данных.

Однако в некоторых особых сценариях, например, когда таблица содержит столбец city, и вы часто запрашиваете и управляете данными на основе стран и городов, вы должны использовать list partitioning для хранения данных нескольких городов в одной стране в одном partition.

Синтаксис

PARTITION BY expression
...

expression ::=
partition_columns

partition_columns ::=
<column>, [ <column> [,...] ]

Параметры

partition_columns

Обязательный: ДА
Описание: Имена столбцов partition.

  • Значения столбцов partition могут быть строковыми (BINARY не поддерживается), date или datetime, целочисленными и логическими значениями. Столбец partition допускает значения NULL.
  • Каждый partition может содержать только данные с одинаковым значением в столбце partition. Чтобы включить данные с различными значениями в столбце partition в partition, см. List partitioning.

примечание

Начиная с версии v1.5.2, вы можете опустить скобки, которые используются для обертывания столбцов partition. Например, вы можете заменить PARTITION BY (dt,city) на PARTITION BY dt,city.

Примечания по использованию

  • Во время загрузки данных Selena автоматически создает некоторые partitions на основе загруженных данных, но если задание загрузки завершается неудачей по какой-либо причине, partitions, автоматически созданные Selena, не могут быть автоматически удалены.
  • Selena устанавливает максимальное количество автоматически создаваемых partitions для одной загрузки по умолчанию в 4096, что можно настроить через параметр FE auto_partition_max_creation_number_per_load. Этот параметр может предотвратить случайное создание слишком большого количества partitions.
  • Правило именования для partitions: если указано несколько столбцов partition, значения различных столбцов partition соединяются подчеркиванием _ в имени partition, и формат - p<значение в столбце partition 1>_<значение в столбце partition 2>_.... Например, если два столбца dt и province указаны как столбцы partition, оба из которых имеют строковый тип, и загружается строка данных со значениями 2022-04-01 и beijing, соответствующий автоматически созданный partition именуется p20220401_beijing.

Примеры

Пример 1: Предположим, вы часто запрашиваете детали биллинга центра обработки данных на основе временных диапазонов и конкретных городов. При создании таблицы вы можете использовать выражение partition для указания первых столбцов partition как dt и city. Таким образом, данные, относящиеся к одной и той же дате и городу, направляются в один и тот же partition, и partition pruning может быть использован для значительного повышения эффективности запросов.

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 dt,city
DISTRIBUTED BY HASH(`id`);

Вставьте одну строку данных в таблицу.

INSERT INTO t_recharge_detail1
VALUES (1, 1, 1, 'Houston', '2022-04-01');

Просмотрите partitions. Результат показывает, что Selena автоматически создает partition p20220401_Houston1 на основе загруженных данных. Во время последующей загрузки данные со значениями 2022-04-01 и Houston в столбцах partition dt и city хранятся в этом partition.

подсказка

Каждый partition может содержать только данные с указанным одним значением для столбца partition. Чтобы указать несколько значений для столбца partition в partition, см. List partitions.

MySQL > SHOW PARTITIONS from t_recharge_detail1\G
*************************** 1. row ***************************
PartitionId: 16890
PartitionName: p20220401_Houston
VisibleVersion: 2
VisibleVersionTime: 2023-07-19 17:24:53
VisibleVersionHash: 0
State: NORMAL
PartitionKey: dt, city
List: (('2022-04-01', 'Houston'))
DistributionKey: id
Buckets: 6
ReplicationNum: 3
StorageMedium: HDD
CooldownTime: 9999-12-31 23:59:59
LastConsistencyCheckTime: NULL
DataSize: 2.5KB
IsInMemory: false
RowCount: 1
1 row in set (0.00 sec)

Партиционирование на основе сложного выражения временной функции (начиная с v1.5.2)

Начиная с версии v1.5.2, expression partitioning поддерживает любые выражения, которые возвращают типы DATE или DATETIME, чтобы адаптироваться к еще более сложным сценариям партиционирования. Для поддерживаемых временных функций см. Приложение - Поддерживаемые временные функции.

Например, вы можете определить столбец Unix timestamp и использовать from_unixtime() непосредственно для столбца в выражении partition для определения ключа partition вместо определения сгенерированного столбца DATE или DATETIME с функцией. Для получения дополнительной информации об использовании см. Примеры.

Начиная с версии v1.5.2, partition pruning поддерживается для partitions на основе большинства функций, связанных с DATETIME.

Примеры

Пример 1: Предположим, вы назначаете Unix timestamp каждой строке данных и часто запрашиваете данные по дням. Вы можете использовать столбец timestamp с функцией from_unixtime() в выражении для определения timestamp в качестве столбца partition, а гранулярность partition - день при создании таблицы. Данные каждого дня хранятся в одном partition, и partition pruning может быть использован для улучшения эффективности запросов.

CREATE TABLE orders (
ts BIGINT NOT NULL,
id BIGINT NOT NULL,
city STRING NOT NULL
)
PARTITION BY from_unixtime(ts,'%Y%m%d');

Пример 2: Предположим, вы назначаете INT тип timestamp каждой строке данных и храните данные ежемесячно. Вы можете использовать столбец timestamp с функциями cast() и str_to_date() в выражении для преобразования timestamp в тип DATE, установить его в качестве столбца partition, а гранулярность partition - месяц, используя date_trunc() при создании таблицы. Данные каждого месяца хранятся в одном partition, и partition pruning может быть использован для улучшения эффективности запросов.

CREATE TABLE orders_new (
ts INT NOT NULL,
id BIGINT NOT NULL,
city STRING NOT NULL
)
PARTITION BY date_trunc('month', str_to_date(CAST(ts as STRING),'%Y%m%d'));

Примечания по использованию

Partition pruning применим к случаям партиционирования на основе сложного выражения временной функции:

  • Если предложение partition - PARTITION BY from_unixtime(ts), запросы с фильтрами в формате ts>1727224687 могут быть ограничены до соответствующих partitions.
  • Если предложение partition - PARTITION BY str2date(CAST(ts AS string),'%Y%m'), запросы с фильтрами в формате ts = "20240506" могут быть ограничены.
  • Вышеуказанные случаи также применимы к Партиционированию на основе смешанного выражения.

Партиционирование на основе смешанного выражения (начиная с v1.5.2)

Начиная с версии v1.5.2, expression partitioning поддерживает несколько столбцов partition, один из которых является выражением временной функции.

Примеры

Пример 1: Предположим, вы назначаете Unix timestamp каждой строке данных и часто запрашиваете данные по дням и конкретному городу. Вы можете использовать столбец timestamp (с функцией from_unixtime()) и столбец city в качестве столбцов partition при создании таблицы. Данные каждого дня в каждом городе хранятся в одном partition, и partition pruning может быть использован для улучшения эффективности запросов.

CREATE TABLE orders (
ts BIGINT NOT NULL,
id BIGINT NOT NULL,
city STRING NOT NULL
)
PARTITION BY from_unixtime(ts,'%Y%m%d'), city;

Управление partitions

Загрузка данных в partitions

Во время загрузки данных Selena автоматически создаст partitions на основе загруженных данных и правила partition, определенного выражением partition.

Обратите внимание, что если вы используете expression partitioning при создании таблицы и вам необходимо использовать INSERT OVERWRITE для перезаписи данных в конкретном partition, независимо от того, создан ли partition или нет, в настоящее время вам необходимо явно указать диапазон partition в PARTITION(). Это отличается от Range Partitioning или List Partitioning, которые позволяют вам указывать только имя partition в PARTITION (<partition_name>).

Если вы используете выражение временной функции при создании таблицы и хотите перезаписать данные в конкретном partition, вам необходимо указать начальную дату или datetime этого partition (гранулярность partition, настроенная при создании таблицы). Если partition не существует, он может быть автоматически создан во время загрузки данных.

INSERT OVERWRITE site_access1 PARTITION(event_day='2022-06-08 20:12:04')
SELECT * FROM site_access2 PARTITION(p20220608);

Если вы используете выражение столбца при создании таблицы и хотите перезаписать данные в конкретном partition, вам необходимо указать значения столбца partition, которые содержит partition. Если partition не существует, он может быть автоматически создан во время загрузки данных.

INSERT OVERWRITE t_recharge_detail1 PARTITION(dt='2022-04-02',city='texas')
SELECT * FROM t_recharge_detail2 PARTITION(p20220402_texas);

Просмотр partitions

Когда вы хотите просмотреть конкретную информацию об автоматически созданных partitions, вам необходимо использовать оператор SHOW PARTITIONS FROM <table_name>. Оператор SHOW CREATE TABLE <table_name> возвращает только синтаксис для expression partitioning, настроенного при создании таблицы.

MySQL > SHOW PARTITIONS FROM t_recharge_detail1;
+-------------+-------------------+----------------+---------------------+--------------------+--------+--------------+-----------------------------+-----------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
| PartitionId | PartitionName | VisibleVersion | VisibleVersionTime | VisibleVersionHash | State | PartitionKey | List | DistributionKey | Buckets | ReplicationNum | StorageMedium | CooldownTime | LastConsistencyCheckTime | DataSize | IsInMemory | RowCount |
+-------------+-------------------+----------------+---------------------+--------------------+--------+--------------+-----------------------------+-----------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
| 16890 | p20220401_Houston | 2 | 2023-07-19 17:24:53 | 0 | NORMAL | dt, city | (('2022-04-01', 'Houston')) | id | 6 | 3 | HDD | 9999-12-31 23:59:59 | NULL | 2.5KB | false | 1 |
| 17056 | p20220402_texas | 2 | 2023-07-19 17:27:42 | 0 | NORMAL | dt, city | (('2022-04-02', 'texas')) | id | 6 | 3 | HDD | 9999-12-31 23:59:59 | NULL | 2.5KB | false | 1 |
+-------------+-------------------+----------------+---------------------+--------------------+--------+--------------+-----------------------------+-----------------+---------+----------------+---------------+---------------------+--------------------------+----------+------------+----------+
2 rows in set (0.00 sec)

Слияние expression partitions

В управлении данными партиционирование на основе различной временной гранулярности имеет решающее значение для оптимизации запросов и хранения. Для повышения эффективности хранения и производительности запросов Selena поддерживает слияние нескольких expression partitions более тонкой временной гранулярности в один partition более грубой временной гранулярности, например, слияние partitions по дням в один partition по месяцам. Путем слияния partitions, которые соответствуют указанному условию (временной диапазон), Selena позволяет партиционировать данные с различной временной гранулярностью.

Синтаксис

ALTER TABLE [<db_name>.]<table_name>
PARTITION BY <time_expr>
[WHERE <time_range_column>] BETWEEN <start_time> AND <end_time>

Параметры

PARTITION BY <time_expr>

Обязательный: ДА
Описание: Указывает новую временную гранулярность для стратегии партиционирования, например, PARTITION BY date_trunc('month', dt).

WHERE <time_range_column> BETWEEN <start_time> AND <end_time>

Обязательный: ДА
Описание: Указывает временной диапазон partitions, которые необходимо объединить. Partitions в пределах этого диапазона будут объединены на основе правил, определенных в предложении PARTITION BY.

Пример

Объединить partitions в таблице site_access1 и изменить гранулярность времени partition с дня на месяц. Временной диапазон partitions, которые необходимо объединить, - от 2024-01-01 до 2024-03-31.

ALTER TABLE site_access1 PARTITION BY date_trunc('month', event_day)
BETWEEN '2024-01-01' AND '2024-03-31';

После слияния:

  • Partitions уровня дня с 2024-01-01 по 2024-01-31 объединяются в partition уровня месяца 2024-01.
  • Partitions уровня дня с 2024-02-01 по 2024-02-29 объединяются в partition уровня месяца 2024-02.
  • Partitions уровня дня с 2024-03-01 по 2024-03-31 объединяются в partition уровня месяца 2024-03.

Примечания по использованию

  • Слияние поддерживается только для expression partitions на основе временной функции.
  • Слияние partitions с несколькими столбцами partition не поддерживается.
  • Параллельное выполнение слияния и операций Schema Change/DML не поддерживается.

Ограничения

  • Начиная с версии v1.5.2, режим shared-data Selena поддерживает выражение временной функции. И начиная с версии v1.5.2, режим shared-data Selena дополнительно поддерживает выражение столбца.
  • В настоящее время использование CTAS для создания таблиц, настроенных с expression partitioning, не поддерживается.
  • В настоящее время использование Spark Load для загрузки данных в таблицы, использующие expression partitioning, не поддерживается.
  • Когда оператор ALTER TABLE <table_name> DROP PARTITION <partition_name> используется для удаления partition, созданного с использованием выражения столбца, данные в partition удаляются напрямую и не могут быть восстановлены.
  • Начиная с версий v1.5.2, Selena поддерживает резервное копирование и восстановление таблиц, созданных со стратегией expression partitioning.

Приложение

Поддерживаемые временные функции

Expression partitioning поддерживает следующие функции:

Временные функции:

  • timediff
  • datediff
  • to_days
  • years_add/sub
  • quarters_add/sub
  • months_add/sub
  • weeks_add/sub
  • date_add/sub
  • days_add/sub
  • hours_add/sub
  • minutes_add/sub
  • seconds_add/sub
  • milliseconds_add/sub
  • date_trunc
  • date_format(YmdHiSf/YmdHisf)
  • str2date(YmdHiSf/YmdHisf)
  • str_to_date(YmdHiSf/YmdHisf)
  • to_iso8601
  • to_date
  • unix_timestamp
  • from_unixtime(YmdHiSf/YmdHisf)
  • time_slice

Другие функции:

  • add
  • subtract
  • cast
примечание
  • Поддерживается комбинированное использование нескольких временных функций.
  • Системный часовой пояс по умолчанию используется для всех временных функций, перечисленных выше.
  • Формат значения временной функции, YmdHiSf, должен начинаться с наиболее грубой временной гранулярности, %Y. Форматы, которые начинаются с более тонкой временной гранулярности, например, %m-%d, не допускаются.

Пример

PARTITION BY from_unixtime(cast(str as INT) + 3600, '%Y-%m-%d')