表属性

    表属性为 key=value 的形式,多个属性需要用逗号分隔。具体示例如下,其中 t 为所要修改的表名,p 为所要修改的分区名,[]内部为可选项。

    • 设置表或分区属性

    • 重置表或分区属性

      1. ALTER TABLE t [PARTITION p] ATTRIBUTES [=] DEFAULT;
    • 查看全部表及分区属性

      1. SELECT * FROM information_schema.attributes;
    • 查看某一张表或分区配置的属性

      1. SELECT * FROM information_schema.attributes WHERE id='schema/t[/p]';

    为分区表配置的属性会对表的所有分区生效。一种例外情况是,如果分区表和分区都配置了相同属性但属性值不同,分区属性将覆盖分区表属性。例如,当分区表 t 配置属性 key=value,同时分区 p 配置属性 key=value1 时:

    1. ALTER TABLE t ATTRIBUTES[=]'key=value';

    分区 p 实际生效的属性为 key=value1

    当写入或读取数据存在热点时,可以使用表属性控制 Region 合并,通过为表或分区添加 merge_option 属性,将其设置为 deny 来解决。以下介绍了两种使用场景。

    新建表或分区的写入热点问题

    在对某张新建表或某个新建分区写入数据存在热点问题时,通常需要使用分裂打散 Region 的操作避免写入热点,但由于新建表或分区的分裂操作实际产生的是空 Region,如果分裂打散操作距离写入存在一定时间间隔,则 Region 可能会被合并,从而导致无法真正规避写入热点问题。此时可以为表或分区添加 merge_option 属性,设置为 deny 来解决问题。

    只读场景下周期性读热点问题

    在只读场景下,如果是通过手动分裂 Region 缓解某张表或分区的周期性读热点问题,且不希望热点消失后手动分裂的 Region 被合并。此时可以为表或分区添加 merge_option 属性,设置为 deny 来解决问题。

    使用方法如下,其中 t 为所要修改的表名,p 为所要修改的分区名。

      1. 允许属于某个表的 Region 被合并

        1. ALTER TABLE t ATTRIBUTES 'merge_option=allow';
      2. 重置某个表的属性

      3. 禁止属于某个分区的 Region 被合并

      4. 允许属于某个分区的 Region 被合并

        1. ALTER TABLE t PARTITION p attributes 'merge_option=allow';
      5. 查看所有配置了 merge_option 属性的表或分区

        1. SELECT * FROM information_schema.attributes WHERE attributes LIKE '%merge_option%';

      同时配置上述两个属性时,实际分区 p 的 Region 可以被合并。当分区的属性被重置时,分区 p 则会继承表 t 的属性,Region 无法被合并。

      • 如果目前只存在分区表的属性,即使配置 merge_option=allow,分区也会默认按照实际分区数量切分成多个 Region。如需合并所有 Region,则需要重置该分区表的属性
      • 使用该属性需要注意 PD 的参数 的配置。如果没有配置 merge_option,Region 在超过 split-merge-interval 指定的时间后满足条件即可合并。如果配置了 merge_option,则超过指定时间后会根据 merge_option 的配置情况再决定是否可以合并。