Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Партицирование Timestamp / 10 сообщений из 10, страница 1 из 1
06.11.2019, 10:54
    #39885594
jus
jus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
Добрый день. Имеется таблица:
CREATE TABLE test.tab_part(
date_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
user_id int(5) DEFAULT NULL
);
Нужно сделать партиции по существующей таблице через alter table на сегодняшний и вчерашний день через вызов now() .
Делал так:
ALTER TABLE tab_partPARTITION BY RANGE (UNIX_TIMESTAMP(date_time ))
(PARTITION p2019_11_06 VALUES LESS THAN (NOW()),
PARTITION p2019_11_05 VALUES LESS THAN (date_add(NOW(), INTERVAL -1 DAY)));
Получаю ошибку:
Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
Изучив все, что пишут - не нашел ответа для себя.
Понятно, что поле должно быть INT, но варианты с to_days/UNIX_TIMESTAMP и остальные попытки не дали результаты.
Помогите разобраться, что не так?
Либо если есть другие варианты как получить партиции за сегодня и вчера.
...
Рейтинг: 0 / 0
06.11.2019, 11:33
    #39885644
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
авторLESS THAN (NOW()),

И как это должно работать? Каждую 0.000001с перемещать строки?

Партицирование должно выполняться по постоянному признаку. Например, все строки по полю от 2019-11-01 до 2019-12-01. PARTITION BY RANGE (date_time ) PARTITION p2019_11_06 VALUES LESS THAN ('2019-11-07') если меня память о синтаксисе mysql не обманывает.
...
Рейтинг: 0 / 0
06.11.2019, 11:45
    #39885657
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
jus
Нужно сделать партиции по существующей таблице
Любое изменение начинается с ответа на вопросы: зачем это будет сделано? какой от этого планируется профит?

Пока нет ответов - и вопрос, и даже само мероприятие, не имеют смысла.
...
Рейтинг: 0 / 0
06.11.2019, 11:54
    #39885669
jus
jus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
Melkij, ok.
К примеру, делаю
ALTER TABLE tab_part PARTITION BY RANGE (to_days(date_time ))
(PARTITION p2019_11_06 VALUES LESS THAN (to_days(NOW())),
PARTITION p2019_11_05 VALUES LESS THAN (to_days(date_add(NOW(), INTERVAL -1 DAY))));
Получаю ту же ошибку.
Здесь же постоянный признак? Получено точное число в 1 день.
...
Рейтинг: 0 / 0
06.11.2019, 11:55
    #39885671
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
jus
Здесь же постоянный признак?
Нет. NOW() явно не тянет на "постоянный"...
...
Рейтинг: 0 / 0
06.11.2019, 11:56
    #39885674
jus
jus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
Akina, где-то в правилах форума есть вопрос зачем user это делает.
Это часть очень большой задачи, которой я интересуюсь. Хочу сделать маленькую, чтобы решить большую.
Большая заключается, в партицировании таблицы по дням и разные функции к этому.
...
Рейтинг: 0 / 0
06.11.2019, 11:57
    #39885675
jus
jus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
Akina, to_days(now()) не тянет? Почему?
...
Рейтинг: 0 / 0
06.11.2019, 11:58
    #39885676
jus
jus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
Akina, из-за того что будет изменяться изо дня в день? Из-за этого?
То есть по синтаксису там всегда конкретное значение? не переменное ото дня?
...
Рейтинг: 0 / 0
06.11.2019, 13:09
    #39885717
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
jus
из-за того что будет изменяться изо дня в день? Из-за этого?
Именно. Принцип партиционирования (точнее, один из) - до тех пор, пока описание партиции не будет изменено, запись попадает в эту партицию независимо ни от чего. Детерминированность, иным словом. А у тебя, будь возможно то, что ты пытаешься сделать, попавшая сегодня в партицию запись завтра туда не попадёт.
...
Рейтинг: 0 / 0
06.11.2019, 14:53
    #39885795
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партицирование Timestamp
jus
в партицировании таблицы по дням
Вот это и надо было спрашивать.

https://dev.mysql.com/doc/refman/8.0/en/partitioning-types.html A very common use of database partitioning is to segregate data by date. Some database systems support explicit date partitioning, which MySQL does not implement in 8.0. However, it is not difficult in MySQL to create partitioning schemes based on DATE, TIME, or DATETIME columns, or based on expressions making use of such columns.

When partitioning by KEY or LINEAR KEY, you can use a DATE, TIME, or DATETIME column as the partitioning column without performing any modification of the column value. For example, this table creation statement is perfectly valid in MySQL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE members (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Партицирование Timestamp / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]