所以我是第一次在mysql中尝试分区,任何帮助将不胜感激。我要分区执行的操作是在分区1的当前日期之前,分区2的下一周和分区3的最大值之前。

create TABLE diagnostics_daily_device_summary (
ID bigint(20) NOT NULL AUTO_INCREMENT,
timestamp datetime,


-包括其他字段,但出于示例的考虑,我不会
麻烦把它们扔进去

PRIMARY KEY (ID, timestamp)
        )
        PARTITION BY RANGE (yearweek(timestamp))(
        PARTITION p1 VALUES LESS THAN (yearweek(curdate())),
        PARTITION p2 VALUES LESS THAN (yearweek(date_add(curdate(), interval 7 day))),
    PARTITION p3 VALUES LESS THAN maxvalue
);


我需要保留最近3周的数据,这就是为什么要将其细分为“年周”格式。

当我运行查询时,我得到的错误消息是

错误代码:1064。(sub)分区函数中的常量,随机或时区相关表达式不允许在')附近,PARTITION p201547值小于(yearweek(date_add(curdate(),interval 7 d',第70行)

我不太确定如何解决它。

另外,我想每周增加一个新的星期,而在上个星期删除,我从在线资源中获得了这行代码

USE demotimeparts;
DROP PROCEDURE IF EXISTS rotateTimePartition;
DELIMITER //
CREATE PROCEDURE rotateTimePartition (newPartValue DATETIME)
BEGIN
        DECLARE keepStmt VARCHAR(2000) default @stms;
        DECLARE partitionToDrop VARCHAR(64);

    SELECT 201501
    INTO partitionToDrop
        -- FROM SCHEMA_NAME.partitions
        WHERE table_schema='SCHEMA_NAME'
        AND tabe_name='diagnostics_daily_device_summary'
        AND partition_ordinary_position=1;
    SET @stmt = CONCAT ('ALTER TABLE diagnostics_daily_device_summary DROP PARTITION' ,     partitionToDrop);
    PREPARE pStmt FROM @stmt;
    EXECUTE pStmt;
    DEALLOCATE PREPARE pStmt;

    SET @stmt = CONCAT ('ALTER TABLE diagnostics_daily_device_summary ADD PARTITION (PARTITION Y',
                        DATE_FORMAT(newPartValue, '%Y%m%d'),
                        ' VALUES LESS THAN (TO_DAYS(\'',
                         DATE_FORMAT(newPartValue, '%Y-%m-%d'),
                         '\')))');

    PREPARE pStmt FROM @stmt;
    EXECUTE pStmt;
    DEALLOCATE PREPARE pStmt;

    SET @stmt = keepStmt;
END //
DELIMITER;


就像我说的,任何帮助将不胜感激!再次感谢你。

最佳答案

“时区”“错误”与不确定特定时间在哪个星期有关。如果时区发生变化,则某些数据可能位于错误的分区中,从而使SELECTs给出错误的答案。

另外,CURDATE()将在CREATE TABLE时进行评估。我怀疑这不是您想要的。

由于您确实想删除旧数据等,因此建议您只花几天或几周的时间并使用固定的日期(使用TO_DAYS())。有关如何进行轮换的详细信息和其他问题的提示,请参见http://mysql.rjweb.org/doc.php/partitionmaint

09-10 05:01
查看更多