GBase 8s ALTER FRAGMENT 语句 MODIFY子句(七)

143 篇文章 3 订阅
142 篇文章 0 订阅

MODIFY 子句

列表分片的 MODIFY 子句的示例
您可以使用 MODIFY 子句对按列表分片的表或索引的分片进行更改,包括以下更改:

l 更改现有列表分片的名称

l 将现有列表分片的存储位置移动到另一个 dbspace

l 更改一个或多个列表分片的表达式

以下 ALTER FRAGMENT ON TABLE 语句更改了按列表分区的表的分片的名称、分片表达式列表和其存储位置:

ALTER FRAGMENT ON TABLE T2 MODIFY

   PARTITION part1 TO PARTITION part11

   VALUES ('CA', 'OR', 'TX') IN dbs1;

这里将分片名称 part1 更改为 part11,将值 ‘TX’ 添加到此分片的表达式的列表中,并且将已命名的分片移动到 dbspace dbs1 中。

以下示例说明了带有列表分片方案的 MODIFYE 子句的这些和其它用途,也说明了由于列表分片的逻辑限制会使 MODIFY 操作失败。

假设该 CREATE TABLE 语句定义了以下结构的表 myTable ,且此表有列表分片策略:

CREATE TABLE myTable (i int, c char(2))

    FRAGMENT BY LIST (c)

    PARTITION p1 VALUES ("AB", "CD") IN dbs1,

    PARTITION p2 VALUES ("PQ", "RS") IN dbs2,

    PARTITION p3 REMAINDER IN dbs3;

下一 ALTER FRAGMENT 语句修改了 p2 分片的存储分片策略:

ALTER FRAGMENT ON TABLE myTable MODIFY

  PARTITION p2 TO PARTITION newp2

   VALUES (NULL) IN dbs5;

上述语句对该分片及其存储分布具有以下影响:

l 重新定义了 p2 分片的分片表达式,将其变为 NULL 分片,

l 将此分片的名称更改为 newp2,

l 将此分片的存储位置从 dbs2 移动到 dbs5 ,

l 将存储在 p2 分片中的现有数据行移动到余项分片 p3 中,因为这些行的 c 列中的分片键值(“PQ” 和 “RS”)不符合新的 NULL 表达式。

如果启用自动更新分布统计信息,实现数据重分布 ALTER FRAGMENT . . . MODIFY 的语句会导致受影响的分片的分片级别统计信息将会删除。然而,表级别的统计信息不会被删除。因为该影响的分片没有分片级别的统计信息,下一个在此表中显式或自动 UPDATE STATISTICS 操作将重建分片级别分布,并将结果存储到系统目录中。

ALTER FRAGMENT 语句指定的修改都基于 tab 表分片,该 CREATE TABLE 语句定义了列表分布方案:

CREATE TABLE tab (i int, c char(2))

  FRAGMENT BY LIST (c)

  PARTITION p1 VALUES ("AB", "CD") IN dbs1,

  PARTITION p2 VALUES ("PQ", "RS") IN dbs2,

  PARTITION p3 VALUES (NULL) IN dbs3,

  PARTITION p4 REMAINDER IN dbs4;

下列语句修改了分片 p1 的分片表达式:

ALTER FRAGMENT ON TABLE tab MODIFY

    PARTITION p1 TO PARTITION p1

    VALUES ("AB", "CD", "EF") IN dbs1;

下列语句修改了分片 p3 的分片表达式:

ALTER FRAGMENT ON TABLE tab MODIFY

   PARTITION p3 TO PARTITION p3

   VALUES ("XX", "YY", "ZZ") IN dbs3;

出于各种原因,ALTER FRAGMENT ON TABLE MODIFY 操作的结果:没有行可以移动到新分片中,并返回了错误,如下所示:

ALTER FRAGMENT ON TABLE tab MODIFY

   PARTITION p3 TO PARTITION p3

   VALUES ("XX", "YY", "ZZ") IN dbs3;

修改后,tab 表生成的存储分布方案会有以下分片:

PARTITION p1 VALUES ("AB", "CD")       IN dbs1,

PARTITION p2 VALUES ("PQ", "RS")       IN dbs2,

PARTITION p3 VALUES ("XX", "YY", "ZZ") IN dbs2

如果之前的余项分片 p3 在列 c 中有一值为 “AA” 的行,那么那一行不适合新分片策略中的任何分片。当尝试从余项分片移动行时,以上的 ALTER FRAGMENT 语句会由于错误而失败。

以下三个示例说明了同一表分片策略的更改会因为重叠而失败。

ALTER FRAGMENT ON TABLE tab MODIFY

  PARTITION p2 TO PARTITION p2 VALUES (NULL) IN dbs2;

因为以上的 ALTER FRAGMENT 语句尝试将分片 p2 更改为一个重复的 NULL 分片,该语句由于产生错误而失败,因为 NULL 分片 p3 已经存在。

以下是对同一表的修改,它尝试将分片 p2 更改为一个重复的余项分片:

ALTER FRAGMENT ON TABLE tab MODIFY

   PARTITION p2 TO PARTITION p2 REMAINDER IN dbs2;

以上语句由于产生错误而失败,因为现有的分片 p4 已经定义为余项分片。

以下修改在两个分片中创建了一个重复的表达式列表值 “RS” :

ALTER FRAGMENT ON TABLE tab MODIFY

    PARTITION p1 TO PARTITION p1

    VALUES ("AB", "CD", "RS") IN dbs1;

由于在 p2 分片的表达式列表中已经定义了列表值 “RS” ,上述语句由于此错误而失败。

有关使用 ALTER FRAGMENT ON INDEX 语句的 MODIFY 选项的示例,请参阅 ALTER FRAGMENT ON INDEX 语句的示例。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值