2013-04-08 2 views
5

Я хочу разделить мои данные по «МЕСЯЦ»Как создать раздел для каждого месяца текущего года

Я пытаюсь это,

ALTER TABLE t1 PARTITION BY RANGE(TO_DAYS(FROM_UNIXTIME(transaction_date)))(
PARTITION JAN VALUES LESS THAN (TO_DAYS('2013-02-01')), 
PARTITION FEB VALUES LESS THAN (TO_DAYS('2013-03-01')), 
PARTITION MAR VALUES LESS THAN (TO_DAYS('2013-04-01')), 
PARTITION APR VALUES LESS THAN (TO_DAYS('2013-05-01')), 
PARTITION MAY VALUES LESS THAN (TO_DAYS('2013-06-01')), 
PARTITION JUN VALUES LESS THAN (TO_DAYS('2013-07-01')), 
PARTITION JUL VALUES LESS THAN (TO_DAYS('2013-08-01')), 
PARTITION AUG VALUES LESS THAN (TO_DAYS('2013-09-01')), 
PARTITION SEP VALUES LESS THAN (TO_DAYS('2013-10-01')), 
PARTITION `OCT` VALUES LESS THAN (TO_DAYS('2013-11-01')), 
PARTITION NOV VALUES LESS THAN (TO_DAYS('2013-12-01')), 
PARTITION `DEC` VALUES LESS THAN (TO_DAYS('2014-01-01')) 

);

transaction_date INT NOT NULL //store date by UNIX_TIMESTAMP() 

Код ошибки: 1564 Функция Этот раздел не допускается

Как создать раздел для каждого месяца текущего года?

ответ

4

Это может быть bug или ограничение.

Ежемесячное разделов вы можете попробовать это:

SQLFiddle Demo

ALTER TABLE t1 PARTITION BY RANGE(transaction_date)(
PARTITION JAN VALUES LESS THAN (UNIX_TIMESTAMP('2013-02-01')), 
PARTITION FEB VALUES LESS THAN (UNIX_TIMESTAMP('2013-03-01')), 
PARTITION MAR VALUES LESS THAN (UNIX_TIMESTAMP('2013-04-01')), 
PARTITION APR VALUES LESS THAN (UNIX_TIMESTAMP('2013-05-01')), 
PARTITION MAY VALUES LESS THAN (UNIX_TIMESTAMP('2013-06-01')), 
PARTITION JUN VALUES LESS THAN (UNIX_TIMESTAMP('2013-07-01')), 
PARTITION JUL VALUES LESS THAN (UNIX_TIMESTAMP('2013-08-01')), 
PARTITION AUG VALUES LESS THAN (UNIX_TIMESTAMP('2013-09-01')), 
PARTITION SEP VALUES LESS THAN (UNIX_TIMESTAMP('2013-10-01')), 
PARTITION `OCT` VALUES LESS THAN (UNIX_TIMESTAMP('2013-11-01')), 
PARTITION NOV VALUES LESS THAN (UNIX_TIMESTAMP('2013-12-01')), 
PARTITION `DEC` VALUES LESS THAN (UNIX_TIMESTAMP('2014-01-01')) 
); 

Если у вас есть столбец, имеющий DATE как тип данных, то вы можете попробовать это для ежедневного разделения внутри ежемесячного paritioning: Try с использованием sub-partitioning в MySQL

SQLFiddle Demo

ALTER TABLE t1 
PARTITION BY RANGE(MONTH(FROM_UNIXTIME(transaction_date)) 
SUBPARTITION BY HASH(DAY(FROM_UNIXTIME(transaction_date))) 
SUBPARTITIONS 31 (
    PARTITION p0 VALUES LESS THAN (2), 
    PARTITION p1 VALUES LESS THAN (3), 
    PARTITION p2 VALUES LESS THAN (4), 
    PARTITION p3 VALUES LESS THAN (5), 
    PARTITION p4 VALUES LESS THAN (6), 
    PARTITION p5 VALUES LESS THAN (7), 
    PARTITION p6 VALUES LESS THAN (8), 
    PARTITION p7 VALUES LESS THAN (9), 
    PARTITION p8 VALUES LESS THAN (10), 
    PARTITION p9 VALUES LESS THAN (11), 
    PARTITION p10 VALUES LESS THAN (12), 
    PARTITION p11 VALUES LESS THAN MAXVALUE 
); 
+0

@ Omesh! Thx для ответа, но m сталкивается с той же проблемой "Код ошибки: 1564 Эта функция разделов не допускается". Ваш пример в SQL Fiddle - это gud. Есть ли у вас какие-либо идеи об этой ошибке? –

+0

Проверьте обновленный SQLFiddle для вашего примера. – Omesh

Смежные вопросы