Как разделить MYSQL с YEAR MONTH DAY HOUR в качестве столбца метки времени раздела - PullRequest
1 голос
/ 21 ноября 2019

Я пытаюсь воссоздать таблицу AWS Athena в MYSQL с аналогичными разделами, как показано ниже.

enter image description here

Разделы выглядят следующим образом

partition_0 = YEAR
partition_1 = Month
partition_2 = Day
partition_3 = Hour

Как мне этого добиться в MYSQL. В таблице есть столбец отметки времени.

Будет ли запрос на создание таблицы выглядеть следующим образом

CREATE TABLE newTable (
    column var not null,
    .
    .
    .
    timestamp DATETIME(3) NULL DEFAULT NULL,
    PRIMARY KEY (column)
    )
    PARTITION BY LIST (timestamp)(
        PARTITION YEAR VALUES IN ( YEAR(timestamp))
        PARTITION MONTH VALUES IN ( MONTH(timestamp))
        PARTITION DAY VALUES IN  ( DAY(timestamp))
        PARTITION HOUR VALUES IN (HOUR(timestamp))
    )

Я думаю, что RANGE будет лучше, чем LIST, но не совсем уверен, как я могу разбитьДиапазон часов Часы, месяцы и годы.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2019

Я нашел эту статью в Интернете. Я как бы объяснил, как разбивать и разбивать на месяцы. Затем я понял, что должен был разбить раздел на дни, которые будут одним длинным запросом раздела. И запрос должен был бы выполняться каждый год.

Наилучший вариант действий - разделить его по годам, по крайней мере, для меня, чтобы начать. А затем посмотрите, есть ли необходимость разделить по месяцам.

Я также узнаю, что в запросе, если я использую BETWEEN или <= /> =, результаты намного быстрее, чем LIKE-запросы.

Спасибо за вашу помощь.

0 голосов
/ 21 ноября 2019

Вы можете использовать этот оператор, который похож на раздел таблицы Афины. Вам необходимо настроить синтаксис и тип данных в соответствии со стандартом MySQL.

CREATE TABLE newTable  (
    column var not null,
   --
   --
   --

   timestamp DATETIME(3) NULL DEFAULT NULL,
    PRIMARY KEY (column)
)
PARTITION BY LIST COLUMNS(timestamp) (
     PARTITION YEAR VALUES IN ( YEAR(timestamp))
        PARTITION MONTH VALUES IN ( MONTH(timestamp))
        PARTITION DAY VALUES IN  ( DAY(timestamp))
        PARTITION HOUR VALUES IN (HOUR(timestamp))
);

Подробнее см. По этой ссылке https://dev.mysql.com/doc/refman/8.0/en/partitioning-columns-list.html

...