开发者社区 > 数据库 > 数据库管理工具 > 正文

DMS对 两亿的一张表归档, 按月归档,比如归档 1月份的,等一段时间,再归档2月份的 ,怎么操作?

DMS现在有个需求,对 两亿的一张表归档, 按月进行归档,比如归档 1月份的,等待一段时间,再归档2月份的 怎么操作?

展开
收起
嘟嘟嘟嘟嘟嘟 2023-11-08 07:41:05 74 0
5 条回答
写回答
取消 提交回答
  • 对于您的需求,建议您按照以下步骤操作:

    1. 创建子分区表

    首先,根据您的需求,创建一个新的子分区表,以便将数据按月份分开。您可以根据实际需求选择合适的分区方法。

    CREATE TABLE history (
        id INT,
        value TEXT,
        addtime TIMESTAMP
    )
    PARTITION BY RANGE ( YEAR(addtime), MONTH(addtime) ) (
        PARTITION p0 VALUES LESS THAN (1970, 1),
        PARTITION p1 VALUES LESS THAN (1970, 2),
        ...
    );
    
    1. 使用INSERT INTO SELECT语句进行复制

    接下来,可以使用INSERT INTO SELECT语句将原始表的数据复制到新的子分区表中。您可以根据实际需求更改SELECT语句中的条件。

    INSERT INTO history
    SELECT * FROM main_table WHERE YEAR(addtime) = 2023 AND MONTH(addtime) = 1;
    
    1. 更新主键索引

    如果您在主表中设置了主键,则应在复制完数据后更新新子分区表上的主键索引。否则,可能会影响查询性能。

    ALTER TABLE history ADD PRIMARY KEY (id);
    
    1. 删除旧记录

    最后,在确认新子分区表中的数据无误之后,可以删除原始表中的旧记录。您可以根据实际需求更改DELETE语句中的条件。

    DELETE FROM main_table WHERE YEAR(addtime) = 2023 AND MONTH(addtime) = 1;
    
    2023-11-08 21:44:23
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您提供的信息, MySQL 数据库的大表数据归档可以采用分区技术或存储过程等方法进行。以下是具体的步骤:

    1. 对源表进行分区: 将源表按照需要归档的时间范围进行分区, 如按月份分区。
    2. 创建目标表: 在目标数据库中创建一个新的表, 其结构与源表相同。
    3. 使用分区交换技术将源表中的历史数据移动到目标表中: 这种方法可以在不影响在线服务的情况下完成数据迁移。
    4. 执行 OPTIMIZE TABLE 命令: 在完成分区交换之后, 需要对源表进行优化以释放磁盘空间。
    5. 定期重复上述步骤: 根据业务需求, 可以设置定时任务或事件调度器, 按照预定的时间间隔执行数据归档任务。
    2023-11-08 12:51:51
    赞同 1 展开评论 打赏
  • 可以按照以下步骤实现按月归档:

    1. 使用日期字段筛选需要归档的数据:首先确定需要归档的数据范围,然后使用SQL查询语句筛选出符合条件的数据;
    2. 将筛选出的数据导出到新的表中:将筛选出的数据导出到一个新的表中,用于归档;
    3. 创建视图:将原始表中的未归档数据以及归档表中的归档数据合并到一个视图中,这样就可以方便地进行后续的数据查询;
    4. 删除原始表中的归档数据:最后,可以安全地删除原始表中已经被归档的数据,以减少数据冗余和提高效率。
      image.png
    2023-11-08 10:46:34
    赞同 1 展开评论 打赏
  • 只能建多个工单进行归档。此回答整理自钉群“阿里云DMS数据管理用户交流群”

    2023-11-08 10:30:49
    赞同 展开评论 打赏
  • 对于大规模的数据归档,通常我们会使用分区表或者归档表的方式来实现。以下是一个基本的步骤:

    1. 创建一个新的表,用于存储归档后的数据。这个表的结构应该与原始表相同,但是需要添加一个额外的字段,例如archive_date,用于记录数据的归档时间。

    2. 在新的表中,按照你需要的规则(例如,按月)对表中的数据进行分区。这可以通过在查询语句中使用PARTITION BY子句来实现。例如,如果你想要按照月份对数据进行分区,你可以这样写:

      CREATE TABLE archive_table AS
      SELECT * FROM original_table
      PARTITION BY MONTH(data_date);
      
    3. 将原始表中的数据迁移到新的表中。你可以使用INSERT INTO ... SELECT FROM的语句来实现。例如:

      INSERT INTO archive_table
      SELECT * FROM original_table;
      
    4. 删除原始表中的数据。这可以通过使用TRUNCATE TABLE的语句来实现。例如:

      TRUNCATE TABLE original_table;
      
    5. 定期重复步骤2-4,以便在新的表中不断添加新的数据,同时保持原始表为空。

    请注意,这只是一种基本的方法,具体的实现可能需要根据你的数据库系统和具体的需求进行调整。在进行大规模的数据操作时,一定要小心谨慎,避免对生产环境造成过大的影响。

    2023-11-08 08:58:50
    赞同 展开评论 打赏

阿里云提供了一系列数据库管理工具,可以满足您在云上进行数据库管理的各种需求。包含数据传输服务DTS、数据库备份 DBS、数据库自治服务 DAS、数据管理 DMS。

相关产品

  • 数据管理
  • 热门讨论

    热门文章

    相关电子书

    更多
    金融行业高频交易数据管理解决方案 立即下载
    基于Spark的统一数据管理与数据探索平台 立即下载
    INFINIDATA:基于Spark的统一数据管理与探索平台 立即下载