按时间类型分区的问题

为了方便删除日志数据,我们打算使用时间分区建立日志表,但是在建表的时候发现不能使用datetime类型的字段只能使用timestamp的,请问有没有办法用datetime去进行分区,或者如何解决timestamp只能用到2038年的问题

Range COLUMNS 分区

Range COLUMNS 分区是 Range 分区的一种变体。你可以使用一个或者多个列作为分区键,分区列的数据类型可以是整数 (integer)、字符串( CHAR / VARCHAR ), DATEDATETIME 。不支持使用任何表达式。

假设你想要按名字进行分区,并且能够轻松地删除旧的无效数据,那么你可以创建一个表格,如下所示:

CREATE TABLE t (
  valid_until datetime,
  name varchar(255) CHARACTER SET ascii,
  notes text
)
PARTITION BY RANGE COLUMNS(name,valid_until)
(PARTITION `p2022-g` VALUES LESS THAN ('G','2023-01-01 00:00:00'),
 PARTITION `p2023-g` VALUES LESS THAN ('G','2024-01-01 00:00:00'),
 PARTITION `p2024-g` VALUES LESS THAN ('G','2025-01-01 00:00:00'),
 PARTITION `p2022-m` VALUES LESS THAN ('M','2023-01-01 00:00:00'),
 PARTITION `p2023-m` VALUES LESS THAN ('M','2024-01-01 00:00:00'),
 PARTITION `p2024-m` VALUES LESS THAN ('M','2025-01-01 00:00:00'),
 PARTITION `p2022-s` VALUES LESS THAN ('S','2023-01-01 00:00:00'),
 PARTITION `p2023-s` VALUES LESS THAN ('S','2024-01-01 00:00:00'),
 PARTITION `p2024-s` VALUES LESS THAN ('S','2025-01-01 00:00:00'),
 PARTITION `p2022-` VALUES LESS THAN (0x7f,'2023-01-01 00:00:00'),
 PARTITION `p2023-` VALUES LESS THAN (0x7f,'2024-01-01 00:00:00'),
 PARTITION `p2024-` VALUES LESS THAN (0x7f,'2025-01-01 00:00:00'))

该语句将按年份和名字的范围 [’’, ‘G’)、[‘G’, ‘M’)、[‘M’, ‘S’)、[‘S’,) 进行分区,删除无效数据,同时仍然可以在 namevalid_until 列上进行分区裁剪。其中, [,) 是一个半开半闭区间,比如 [‘G’, ‘M’),表示包含 G 、大于 G 并小于 M 的数据,但不包含 M

https://docs.pingcap.com/zh/tidb/dev/partitioned-table#分区表

1 个赞

不是很理解这段含义,名称怎么会有大小之分呢,[’’, ‘G’)、[‘G’, ‘M’)、[‘M’, ‘S’)、[‘S’,) 实际代表着什么。不过我只想知道单纯按时间分区怎么实现,试了下可以直接使用时间去分区

PARTITION BY RANGE COLUMNS(name,valid_until)

那不就是分区字段的值嘛

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。