跳到主要内容

ALTER-TABLE-PROPERTY

ALTER-TABLE-PROPERTY

Name

ALTER TABLE PROPERTY

警告

分区属性与表属性的一些区别

  • 分区属性一般主要关注分桶数(buckets)、存储介质(storage_medium)、副本数(replication)、冷热分离存储策略(storage_policy);
    • 对于已经创建的分区,可以使用alter table {tableName} modify partition({partitionName}) set ({key}={value}) 来修改,但是分桶数(buckets)不能修改;
    • 对于未创建的动态分区(dynamic partition),可以使用alter table {tableName} set (dynamic_partition.{key} = {value}) 来修改其属性;
    • 对于未创建的自动分区(auto partition),可以使用alter table {tableName} set ({key} = {value}) 来修改其属性;
    • 若用户想修改分区的属性,需要修改已经创建分区的属性,同时也要修改未创建分区的属性
  • 除了上面几个属性,其他均为表级别属性
  • 具体属性可以参考建表属性

Description

该语句用于对已有 table 的 property 进行修改操作。这个操作是同步的,命令返回表示执行完毕。

语法:

ALTER TABLE [database.]table alter_clause;

property 的 alter_clause 支持如下几种修改方式

  1. 修改表的 bloom filter 列
ALTER TABLE example_db.my_table SET ("bloom_filter_columns"="k1,k2,k3");

也可以合并到上面的 schema change 操作中(注意多子句的语法有少许区别)

ALTER TABLE example_db.my_table
DROP COLUMN col2
PROPERTIES ("bloom_filter_columns"="k1,k2,k3");
  1. 修改表的Colocate 属性
ALTER TABLE example_db.my_table set ("colocate_with" = "t1");
  1. 将表的分桶方式由 Hash Distribution 改为 Random Distribution
ALTER TABLE example_db.my_table set ("distribution_type" = "random");
  1. 修改表的动态分区属性(支持未添加动态分区属性的表添加动态分区属性)
ALTER TABLE example_db.my_table set ("dynamic_partition.enable" = "false");

如果需要在未添加动态分区属性的表中添加动态分区属性,则需要指定所有的动态分区属性 (注:非分区表不支持添加动态分区属性)

ALTER TABLE example_db.my_table set (
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32"
);
  1. 修改表的 in_memory 属性,只支持修改为'false'
ALTER TABLE example_db.my_table set ("in_memory" = "false");
  1. 启用 批量删除功能
ALTER TABLE example_db.my_table ENABLE FEATURE "BATCH_DELETE";

注意:

  • 只能用在unique 表
  • 用于旧表支持批量删除功能,新表创建时已经支持
  1. 启用按照sequence column的值来保证导入顺序的功能
ALTER TABLE example_db.my_table ENABLE FEATURE "SEQUENCE_LOAD" WITH PROPERTIES (
"function_column.sequence_type" = "Date"
);

注意:

  • 只能用在unique 表
  • sequence_type用来指定sequence列的类型,可以为整型和时间类型
  • 只支持新导入数据的有序性,历史数据无法更改
  1. 将表的默认分桶数改为50
ALTER TABLE example_db.my_table MODIFY DISTRIBUTION DISTRIBUTED BY HASH(k1) BUCKETS 50;

注意:

  • 只能用在分区类型为RANGE,采用哈希分桶的非colocate表
  1. 修改表注释
ALTER TABLE example_db.my_table MODIFY COMMENT "new comment";
  1. 修改列注释
ALTER TABLE example_db.my_table MODIFY COLUMN k1 COMMENT "k1", MODIFY COLUMN k2 COMMENT "k2";
  1. 修改引擎类型

    仅支持将 MySQL 类型修改为 ODBC 类型。driver 的值为 odbc.init 配置中的 driver 名称。

ALTER TABLE example_db.mysql_table MODIFY ENGINE TO odbc PROPERTIES("driver" = "MySQL");
  1. 修改副本数
ALTER TABLE example_db.mysql_table SET ("replication_num" = "2");
ALTER TABLE example_db.mysql_table SET ("default.replication_num" = "2");
ALTER TABLE example_db.mysql_table SET ("replication_allocation" = "tag.location.default: 1");
ALTER TABLE example_db.mysql_table SET ("default.replication_allocation" = "tag.location.default: 1");

注:

  1. default 前缀的属性表示修改表的默认副本分布。这种修改不会修改表的当前实际副本分布,而只影响分区表上新建分区的副本分布。
  2. 对于非分区表,修改不带 default 前缀的副本分布属性,会同时修改表的默认副本分布和实际副本分布。即修改后,通过 show create tableshow partitions from tbl 语句可以看到副本分布数据都被修改了。
  3. 对于分区表,表的实际副本分布是分区级别的,即每个分区有自己的副本分布,可以通过 show partitions from tbl 语句查看。如果想修改实际副本分布,请参阅 ALTER TABLE PARTITION

13. [Experimental] 打开light_schema_change

对于建表时未开启light_schema_change的表,可以通过如下方式打开。

ALTER TABLE example_db.mysql_table SET ("light_schema_change" = "true");

Example

  1. 修改表的 bloom filter 列
ALTER TABLE example_db.my_table SET (
"bloom_filter_columns"="k1,k2,k3"
);

也可以合并到上面的 schema change 操作中(注意多子句的语法有少许区别)

ALTER TABLE example_db.my_table
DROP COLUMN col2
PROPERTIES (
"bloom_filter_columns"="k1,k2,k3"
);
  1. 修改表的Colocate 属性
ALTER TABLE example_db.my_table set ("colocate_with" = "t1");
  1. 将表的分桶方式由 Hash Distribution 改为 Random Distribution
ALTER TABLE example_db.my_table set (
"distribution_type" = "random"
);
  1. 修改表的动态分区属性(支持未添加动态分区属性的表添加动态分区属性)
ALTER TABLE example_db.my_table set (
"dynamic_partition.enable" = "false"
);

如果需要在未添加动态分区属性的表中添加动态分区属性,则需要指定所有的动态分区属性 (注:非分区表不支持添加动态分区属性)

ALTER TABLE example_db.my_table set (
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32"
);
  1. 修改表的 in_memory 属性,只支持修改为'false'
ALTER TABLE example_db.my_table set ("in_memory" = "false");
  1. 启用 批量删除功能
ALTER TABLE example_db.my_table ENABLE FEATURE "BATCH_DELETE";
  1. 启用按照sequence column的值来保证导入顺序的功能
ALTER TABLE example_db.my_table ENABLE FEATURE "SEQUENCE_LOAD" WITH PROPERTIES (
"function_column.sequence_type" = "Date"
);
  1. 将表的默认分桶数改为50
ALTER TABLE example_db.my_table MODIFY DISTRIBUTION DISTRIBUTED BY HASH(k1) BUCKETS 50;
  1. 修改表注释
ALTER TABLE example_db.my_table MODIFY COMMENT "new comment";
  1. 修改列注释
ALTER TABLE example_db.my_table MODIFY COLUMN k1 COMMENT "k1", MODIFY COLUMN k2 COMMENT "k2";
  1. 修改引擎类型
ALTER TABLE example_db.mysql_table MODIFY ENGINE TO odbc PROPERTIES("driver" = "MySQL");
  1. 给表添加冷热分层数据迁移策略
 ALTER TABLE create_table_not_have_policy set ("storage_policy" = "created_create_table_alter_policy");

注:表没有关联过storage policy,才能被添加成功,一个表只能添加一个storage policy

  1. 给表的partition添加冷热分层数据迁移策略
ALTER TABLE create_table_partition MODIFY PARTITION (*) SET("storage_policy"="created_create_table_partition_alter_policy");

注:表的partition没有关联过storage policy,才能被添加成功,一个表只能添加一个storage policy

Keywords

ALTER, TABLE, PROPERTY, ALTER TABLE

Best Practice