ALTER TABLE

description

  1. 该语句用于对已有的 table 进行修改。如果没有指定 rollup index,默认操作 base index
  2. 该语句分为三种操作类型: schema change rollup partition
  3. 这三种操作类型不能同时出现在一条 ALTER TABLE 语句中。
  4. 其中 schema change rollup 是异步操作,任务提交成功则返回。之后可使用 SHOW ALTER 命令查看进度。
  5. partition 是同步操作,命令返回表示执行完毕。
  6. 语法:
  7. ALTER TABLE [database.]table
  8. alter_clause1[, alter_clause2, ...];
  9. alter_clause 分为 partition rollupschema change rename 四种。
  10. partition 支持如下几种修改方式
  11. 1. 增加分区
  12. 语法:
  13. ADD PARTITION [IF NOT EXISTS] partition_name
  14. partition_desc ["key"="value"]
  15. [DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num]]
  16. 注意:
  17. 1) partition_desc 支持一下两种写法:
  18. * VALUES LESS THAN [MAXVALUE|("value1", ...)]
  19. * VALUES [("value1", ...), ("value1", ...))
  20. 1) 分区为左闭右开区间,如果用户仅指定右边界,系统会自动确定左边界
  21. 2) 如果没有指定分桶方式,则自动使用建表使用的分桶方式
  22. 3) 如指定分桶方式,只能修改分桶数,不可修改分桶方式或分桶列
  23. 4) ["key"="value"] 部分可以设置分区的一些属性,具体说明见 CREATE TABLE
  24. 2. 删除分区
  25. 语法:
  26. DROP PARTITION [IF EXISTS] partition_name
  27. 注意:
  28. 1) 使用分区方式的表至少要保留一个分区。
  29. 2) 执行 DROP PARTITION 一段时间内,可以通过 RECOVER 语句恢复被删除的 partition。详见 RECOVER 语句
  30. 3. 修改分区属性
  31. 语法:
  32. MODIFY PARTITION partition_name SET ("key" = "value", ...)
  33. 说明:
  34. 1) 当前支持修改分区的 storage_mediumstorage_cooldown_time replication_num 三个属性。
  35. 2) 对于单分区表,partition_name 同表名。
  36. rollup 支持如下几种创建方式:
  37. 1. 创建 rollup index
  38. 语法:
  39. ADD ROLLUP rollup_name (column_name1, column_name2, ...)
  40. [FROM from_index_name]
  41. [PROPERTIES ("key"="value", ...)]
  42. 注意:
  43. 1) 如果没有指定 from_index_name,则默认从 base index 创建
  44. 2) rollup 表中的列必须是 from_index 中已有的列
  45. 3) properties 中,可以指定存储格式。具体请参阅 CREATE TABLE
  46. 2. 删除 rollup index
  47. 语法:
  48. DROP ROLLUP rollup_name
  49. [PROPERTIES ("key"="value", ...)]
  50. 注意:
  51. 1) 不能删除 base index
  52. 2) 执行 DROP ROLLUP 一段时间内,可以通过 RECOVER 语句恢复被删除的 rollup index。详见 RECOVER 语句
  53. schema change 支持如下几种修改方式:
  54. 1. 向指定 index 的指定位置添加一列
  55. 语法:
  56. ADD COLUMN column_name column_type [KEY | agg_type] [DEFAULT "default_value"]
  57. [AFTER column_name|FIRST]
  58. [TO rollup_index_name]
  59. [PROPERTIES ("key"="value", ...)]
  60. 注意:
  61. 1) 聚合模型如果增加 value 列,需要指定 agg_type
  62. 2) 非聚合模型(如 DUPLICATE KEY)如果增加key列,需要指定KEY关键字
  63. 3) 不能在 rollup index 中增加 base index 中已经存在的列
  64. 如有需要,可以重新创建一个 rollup index
  65. 2. 向指定 index 添加多列
  66. 语法:
  67. ADD COLUMN (column_name1 column_type [KEY | agg_type] DEFAULT "default_value", ...)
  68. [TO rollup_index_name]
  69. [PROPERTIES ("key"="value", ...)]
  70. 注意:
  71. 1) 聚合模型如果增加 value 列,需要指定agg_type
  72. 2) 非聚合模型如果增加key列,需要指定KEY关键字
  73. 3) 不能在 rollup index 中增加 base index 中已经存在的列
  74. (如有需要,可以重新创建一个 rollup index
  75. 3. 从指定 index 中删除一列
  76. 语法:
  77. DROP COLUMN column_name
  78. [FROM rollup_index_name]
  79. 注意:
  80. 1) 不能删除分区列
  81. 2) 如果是从 base index 中删除列,则如果 rollup index 中包含该列,也会被删除
  82. 4. 修改指定 index 的列类型以及列位置
  83. 语法:
  84. MODIFY COLUMN column_name column_type [KEY | agg_type] [NULL | NOT NULL] [DEFAULT "default_value"]
  85. [AFTER column_name|FIRST]
  86. [FROM rollup_index_name]
  87. [PROPERTIES ("key"="value", ...)]
  88. 注意:
  89. 1) 聚合模型如果修改 value 列,需要指定 agg_type
  90. 2) 非聚合类型如果修改key列,需要指定KEY关键字
  91. 3) 只能修改列的类型,列的其他属性维持原样(即其他属性需在语句中按照原属性显式的写出,参见 example 8
  92. 4) 分区列不能做任何修改
  93. 5) 目前支持以下类型的转换(精度损失由用户保证)
  94. TINYINT/SMALLINT/INT/BIGINT 转换成 TINYINT/SMALLINT/INT/BIGINT/DOUBLE
  95. LARGEINT 转换成 DOUBLE
  96. VARCHAR 支持修改最大长度
  97. 6) 不支持从NULL转为NOT NULL
  98. 5. 对指定 index 的列进行重新排序
  99. 语法:
  100. ORDER BY (column_name1, column_name2, ...)
  101. [FROM rollup_index_name]
  102. [PROPERTIES ("key"="value", ...)]
  103. 注意:
  104. 1) index 中的所有列都要写出来
  105. 2) value 列在 key 列之后
  106. 6. 修改table的属性,目前支持修改bloom filter列和colocate_with 属性
  107. 语法:
  108. PROPERTIES ("key"="value")
  109. 注意:
  110. 也可以合并到上面的schema change操作中来修改,见下面例子
  111. rename 支持对以下名称进行修改:
  112. 1. 修改表名
  113. 语法:
  114. RENAME new_table_name;
  115. 2. 修改 rollup index 名称
  116. 语法:
  117. RENAME ROLLUP old_rollup_name new_rollup_name;
  118. 3. 修改 partition 名称
  119. 语法:
  120. RENAME PARTITION old_partition_name new_partition_name;

example

  1. [partition]
  2. 1. 增加分区, 现有分区 [MIN, 2013-01-01),增加分区 [2013-01-01, 2014-01-01),使用默认分桶方式
  3. ALTER TABLE example_db.my_table
  4. ADD PARTITION p1 VALUES LESS THAN ("2014-01-01");
  5. 2. 增加分区,使用新的分桶数
  6. ALTER TABLE example_db.my_table
  7. ADD PARTITION p1 VALUES LESS THAN ("2015-01-01")
  8. DISTRIBUTED BY HASH(k1) BUCKETS 20;
  9. 3. 增加分区,使用新的副本数
  10. ALTER TABLE example_db.my_table
  11. ADD PARTITION p1 VALUES LESS THAN ("2015-01-01")
  12. ("replication_num"="1");
  13. 4. 修改分区副本数
  14. ALTER TABLE example_db.my_table
  15. MODIFY PARTITION p1 SET("replication_num"="1");
  16. 5. 删除分区
  17. ALTER TABLE example_db.my_table
  18. DROP PARTITION p1;
  19. 6. 增加一个指定上下界的分区
  20. ALTER TABLE example_db.my_table
  21. ADD PARTITION p1 VALUES [("2014-01-01"), ("2014-02-01"));
  22. [rollup]
  23. 1. 创建 index: example_rollup_index,基于 base indexk1,k2,k3,v1,v2)。列式存储。
  24. ALTER TABLE example_db.my_table
  25. ADD ROLLUP example_rollup_index(k1, k3, v1, v2)
  26. PROPERTIES("storage_type"="column");
  27. 2. 创建 index: example_rollup_index2,基于 example_rollup_indexk1,k3,v1,v2
  28. ALTER TABLE example_db.my_table
  29. ADD ROLLUP example_rollup_index2 (k1, v1)
  30. FROM example_rollup_index;
  31. 3. 删除 index: example_rollup_index2
  32. ALTER TABLE example_db.my_table
  33. DROP ROLLUP example_rollup_index2;
  34. [schema change]
  35. 1. example_rollup_index col1 后添加一个key new_col(非聚合模型)
  36. ALTER TABLE example_db.my_table
  37. ADD COLUMN new_col INT KEY DEFAULT "0" AFTER col1
  38. TO example_rollup_index;
  39. 2. example_rollup_indexcol1后添加一个valuenew_col(非聚合模型)
  40. ALTER TABLE example_db.my_table
  41. ADD COLUMN new_col INT DEFAULT "0" AFTER col1
  42. TO example_rollup_index;
  43. 3. example_rollup_indexcol1后添加一个keynew_col(聚合模型)
  44. ALTER TABLE example_db.my_table
  45. ADD COLUMN new_col INT DEFAULT "0" AFTER col1
  46. TO example_rollup_index;
  47. 4. example_rollup_indexcol1后添加一个valuenew_col SUM聚合类型(聚合模型)
  48. ALTER TABLE example_db.my_table
  49. ADD COLUMN new_col INT SUM DEFAULT "0" AFTER col1
  50. TO example_rollup_index;
  51. 5. example_rollup_index 添加多列(聚合模型)
  52. ALTER TABLE example_db.my_table
  53. ADD COLUMN (col1 INT DEFAULT "1", col2 FLOAT SUM DEFAULT "2.3")
  54. TO example_rollup_index;
  55. 6. example_rollup_index 删除一列
  56. ALTER TABLE example_db.my_table
  57. DROP COLUMN col2
  58. FROM example_rollup_index;
  59. 7. 修改 base index col1 列的类型为 BIGINT,并移动到 col2 列后面
  60. ALTER TABLE example_db.my_table
  61. MODIFY COLUMN col1 BIGINT DEFAULT "1" AFTER col2;
  62. 8. 修改 base index val1 列最大长度。原 val1 (val1 VARCHAR(32) REPLACE DEFAULT "abc")
  63. ALTER TABLE example_db.my_table
  64. MODIFY COLUMN val1 VARCHAR(64) REPLACE DEFAULT "abc";
  65. 9. 重新排序 example_rollup_index 中的列(设原列顺序为:k1,k2,k3,v1,v2
  66. ALTER TABLE example_db.my_table
  67. ORDER BY (k3,k1,k2,v2,v1)
  68. FROM example_rollup_index;
  69. 10. 同时执行两种操作
  70. ALTER TABLE example_db.my_table
  71. ADD COLUMN v2 INT MAX DEFAULT "0" AFTER k2 TO example_rollup_index,
  72. ORDER BY (k3,k1,k2,v2,v1) FROM example_rollup_index;
  73. 11. 修改表的 bloom filter
  74. ALTER TABLE example_db.my_table SET ("bloom_filter_columns"="k1,k2,k3");
  75. 也可以合并到上面的 schema change 操作中(注意多子句的语法有少许区别)
  76. ALTER TABLE example_db.my_table
  77. DROP COLUMN col2
  78. PROPERTIES ("bloom_filter_columns"="k1,k2,k3");
  79. 12. 修改表的Colocate 属性
  80. ALTER TABLE example_db.my_table set ("colocate_with" = "t1");
  81. 13. 将表的分桶方式由 Random Distribution 改为 Hash Distribution
  82. ALTER TABLE example_db.my_table set ("distribution_type" = "hash");
  83. [rename]
  84. 1. 将名为 table1 的表修改为 table2
  85. ALTER TABLE table1 RENAME table2;
  86. 2. 将表 example_table 中名为 rollup1 rollup index 修改为 rollup2
  87. ALTER TABLE example_table RENAME ROLLUP rollup1 rollup2;
  88. 3. 将表 example_table 中名为 p1 partition 修改为 p2
  89. ALTER TABLE example_table RENAME PARTITION p1 p2;

keyword

  1. ALTER,TABLE,ROLLUP,COLUMN,PARTITION,RENAME