为了方便删除日志数据,我们打算使用时间分区建立日志表,但是在建表的时候发现不能使用datetime类型的字段只能使用timestamp的,请问有没有办法用datetime去进行分区,或者如何解决timestamp只能用到2038年的问题
Range COLUMNS 分区
Range COLUMNS 分区是 Range 分区的一种变体。你可以使用一个或者多个列作为分区键,分区列的数据类型可以是整数 (integer)、字符串( CHAR
/ VARCHAR
), DATE
和 DATETIME
。不支持使用任何表达式。
假设你想要按名字进行分区,并且能够轻松地删除旧的无效数据,那么你可以创建一个表格,如下所示:
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’,) 进行分区,删除无效数据,同时仍然可以在 name
和 valid_until
列上进行分区裁剪。其中, [,)
是一个半开半闭区间,比如 [‘G’, ‘M’),表示包含 G
、大于 G
并小于 M
的数据,但不包含 M
。
1 个赞
不是很理解这段含义,名称怎么会有大小之分呢,[’’, ‘G’)、[‘G’, ‘M’)、[‘M’, ‘S’)、[‘S’,) 实际代表着什么。不过我只想知道单纯按时间分区怎么实现,试了下可以直接使用时间去分区
PARTITION BY RANGE COLUMNS(name,valid_until)
那不就是分区字段的值嘛
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。