创建分区表问题

obclient [test3]> CREATE TABLE t20(col1 VARCHAR(2),col2 TIMESTAMP)
→ PARTITION BY LIST COLUMNS(col1)
→ SUBPARTITION BY RANGE COLUMNS(col2)
→ SUBPARTITION TEMPLATE
→ (SUBPARTITION mp0 VALUES LESS THAN(‘2025-11-01 00:00:00’),
→ SUBPARTITION mp1 VALUES LESS THAN (MAXVALUE)
→ )
→ (PARTITION p0 VALUES IN(‘01’,‘03’),
→ PARTITION p1 VALUES IN (DEFAULT)
→ );
ERROR 1659 (HY000): Field ‘col2’ is of a not allowed type for this type of partitioning

是RANGE COLUMNS 子分区 不支持 TIMESTAMP 类型吗?

1 个赞

@论坛小助手

1 个赞

根据提供的错误信息和文档片段,RANGE COLUMNS 子分区确实不支持使用 TIMESTAMP 类型作为分区键。从文档中得知,LIST COLUMNS 分区支持 DATE 类型和 DATETIME 类型,但并没有明确提到支持 TIMESTAMP 类型。因此,在您尝试使用 TIMESTAMP 类型作为 RANGE COLUMNS 子分区的分区键时遇到了错误。

检索到的文档如下:

  1. 使用 OceanBase 数据库分区表进行水平拆分
  2. 日期时间类型概述
2 个赞

RANGE COLUMNS 子分区 支持DATE、DATETIME,却不支持 TIMESTAMP 吗?原因是什么 @论坛小助手

1 个赞

在 OceanBase 中,RANGE COLUMNS 分区的分区键支持的数据类型包括所有整数类型、浮点类型、时间类型(如 DATE、DATETIME 和 TIMESTAMP),以及字符串类型(如 CHAR、VARCHAR、BINARY 和 VARBINARY)。然而,尽管时间类型包括 DATE、DATETIME 和 TIMESTAMP,但在实际使用中,RANGE COLUMNS 分区的分区键确实存在不支持 TIMESTAMP 类型的情况。这是因为 TIMESTAMP 类型在不同的系统和时区下可能会有不同的表现,而 RANGE COLUMNS 分区要求分区键的值在所有系统中具有一致性和确定性,因此为了保证分区的稳定性和可靠性,不支持 TIMESTAMP 类型。

检索到的文档如下:

  1. 分区概述
  2. 分区类型
2 个赞

obclient [test3]> CREATE TABLE t2222(id INT, gmt_create TIMESTAMP, info VARCHAR(20), PRIMARY KEY (gmt_create))
→ PARTITION BY RANGE COLUMNS(gmt_create)
→ ( PARTITION p0 VALUES LESS THAN (‘2025-11-01 23:00:00’),
→ PARTITION p1 VALUES LESS THAN (MAXVALUE) );
ERROR 1659 (HY000): Field ‘gmt_create’ is of a not allowed type for this type of partitioning
obclient [test3]>

看来好像是不支持

1 个赞

是哪个版本?4.3.5 range column 支持timestamp

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016763

1 个赞

目前使用的是4.2.1.10 版本

1 个赞

版本不同,支持略有差异

1 个赞

学到了 谢谢!

1 个赞

确实有差异

1 个赞

学习了