暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

变更表类型及拆分规则(DRDS模式)2

酷数据库 2023-10-23
144

单表或广播表变为拆分表

  • 语法


    ALTER TABLE table_name drds_partition_options;

    说明

    • 更多关于drds_partition_options的信息,请参见表类型
    • 若单表设置了自增列,在变更为拆分表时,需提前为该表创建Sequence。如何创建Sequence,请参见CREATE SEQUENCE
  • 示例

    因业务扩展,单表t_order无法承载日益增长的数据。此时,您可以使用如下语句将该单表变更为拆分表(以order_id为拆分键):


    ALTER TABLE t_order dbpartition BY hash(`order_id`);

单表或拆分表变为广播表

  • 语法


    ALTER TABLE table_name BROADCAST;

    说明

    若单表设置了自增列,在变更为广播表时,需提前为该表创建Sequence。如何创建Sequence,请参见 CREATE SEQUENCE

  • 示例

    您可以使用如下语句将单表或拆分表 t_order变更为广播表:


    ALTER TABLE t_order BROADCAST;

广播表或拆分表变为单表

  • 语法


    ALTER TABLE table_name SINGLE;
  • 示例

    您可以使用如下语句将广播表或拆分表 t_order变更为单表:


    ALTER TABLE t_order SINGLE;

变更拆分表的拆分规则

  • 语法


    ALTER TABLE tbl_name drds_partition_options;
  • 示例

    假设已使用如下语句在 PolarDB-X数据库中创建了一张拆分表 t_order(根据 order_id列进行库级拆分):


    CREATE TABLE t_order (
      `id` bigint(11) NOT NULL AUTO_INCREMENT,
      `order_id` varchar(20) DEFAULT NULL,
      `buyer_id` varchar(20) DEFAULT NULL,
      `seller_id` varchar(20) DEFAULT NULL,
      `order_snapshot` longtext DEFAULT NULL,
      `order_detail` longtext DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `l_i_order` (`order_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 
    dbpartition BY hash(`order_id`);

    现需要对 t_order表的拆分规则作出如下变更:

    • 根据order_id列进行库级拆分。
    • buyer_id列做表级拆分。
    • 每个分库包含3个分表。

    您可以使用如下语句实现上述变更:


    ALTER TABLE t_order dbpartition BY hash(order_id) tbpartition BY hash(buyer_id) tbpartitions 3;

相关文档

拆分规则变更后,您可以通过如下命令查看表的拆分规则或拓扑结构:

常见问题

Q:为什么有时拆分键变更的DDL任务会执行失败?此时该如何处理?

A:实例崩溃或唯一索引存在冲突等因素会导致拆分规则变更的DDL任务执行失败。但这不会损坏原表任何数据,也不会阻塞正常的DML和查询语句执行。当拆分键变更的DDL任务执行失败时,您可以通过ROLLBACK DDL命令回滚该任务,然后再次尝试变更。关于ROLLBACK DDL命令的详情。

说明

暂不支持通过 RECOVER DDL命令恢复执行失败的拆分键变更任务。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论