0

我正在尝试使用以下 RANGE 函数创建分区表

CREATE TABLE `fact_events` (
`event_key` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`event_type_key` tinyint(3) unsigned NOT NULL,
`analytic_file_id` bigint(20) unsigned NOT NULL ',
`sdk_session_id` bigint(20) unsigned NOT NULL,
`virtual_button_create_id` bigint(20) unsigned NOT NULL C,
 PRIMARY KEY (`event_key`),
 KEY `idx_events_event_type` (`event_type_key`),
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 
  PARTITION BY RANGE(FLOOR(event_key/100000))
 PARTITION p0 VALUES LESS THAN (0),
 PARTITION p1 VALUES LESS THAN (1),
 PARTITION p2 VALUES LESS THAN (2),
 PARTITION p3 VALUES LESS THAN (3),
 PARTITION p4 VALUES LESS THAN (4),
 PARTITION p513 VALUES LESS THAN MAXVALUE
 )

我不断得到

ERROR 1564 (HY000): This partition function is not allowed

欢迎任何想法谢谢

4

1 回答 1

1

MySQL 在此处记录了分区函数。该floor()功能似乎有一些特殊的考虑。在这种情况下,我认为问题可能是除法返回浮点/双精度结果而不是十进制结果。

这在您的情况下很容易解决,因为您不需要进行除法:

CREATE TABLE `fact_events` (
    `event_key` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `event_type_key` tinyint(3) unsigned NOT NULL,
    `analytic_file_id` bigint(20) unsigned NOT NULL,
    `sdk_session_id` bigint(20) unsigned NOT NULL,
    `virtual_button_create_id` bigint(20) unsigned NOT NULL,
     PRIMARY KEY (`event_key`),
     KEY `idx_events_event_type` (`event_type_key`)
 ) PARTITION BY RANGE(event_key) (
     PARTITION p0 VALUES LESS THAN (0),
     PARTITION p1 VALUES LESS THAN (100000),
     PARTITION p2 VALUES LESS THAN (200000),
     PARTITION p3 VALUES LESS THAN (300000),
     PARTITION p4 VALUES LESS THAN (40000000),
     PARTITION p5 VALUES LESS THAN MAXVALUE
 )

编辑:

作为解释。 floor()返回一个整数值,但不一定是整数类型。这是文档:

对于精确值数值参数,返回值具有精确值数值类型。对于字符串或浮点参数,返回值具有浮点类型。

当您将两个整数相除时,您会产生一个浮点参数,这不适用于分区。

于 2013-06-30T15:00:18.453 回答