StarRocks的改表语句

文章目录

    • StarRocks的改表语句
      • 1 数据类型
      • 2 修改表结构
      • 3 示例

1 数据类型



2 修改表结构

StarRocks 支持多种 DDL 操作。
可以通过 ALTER TABLE 命令可以修改表的 Schema,包括增加列,删除列,修改列类型(暂不支持修改列名称),改变列顺序。
1 增加列
例如,在以上创建的表中,在 ispass 列后新增一列 uv,类型为 BIGINT,默认值为 0。

ALTER TABLE detailDemo ADD COLUMN uv BIGINT DEFAULT '0' after ispass;

2 删除列
删除以上步骤新增的列。注意如果您通过上述步骤添加了 uv,请务必删除此列以保证后续 Quick Start 内容可以执行。

ALTER TABLE detailDemo DROP COLUMN uv;

3 查看修改表结构作业状态
修改表结构为异步操作。提交成功后,您可以通过以下命令查看作业状态。

SHOW ALTER TABLE COLUMN\G;

当作业状态为 FINISHED,则表示作业完成,新的表结构修改已生效。
修改 Schema 完成之后,您可以通过以下命令查看最新的表结构。
DESC table_name;

3 示例

1 table
修改表的默认副本数量,新建分区副本数量默认使用此值。

ALTER TABLE example_db.my_tableSET ("default.replication_num" = "2");

修改单分区表的实际副本数量(只限单分区表)。

ALTER TABLE example_db.my_tableSET ("replication_num" = "3");

修改数据在多副本间的写入和同步方式。

ALTER TABLE example_db.my_tableSET ("replicated_storage" = "false");

以上示例表示将多副本的写入和同步方式设置为 leaderless replication,即数据同时写入到多个副本,不区分主从副本。
2 partition
增加分区,现有分区 [MIN, 2013-01-01),增加分区 [2013-01-01, 2014-01-01),使用默认分桶方式。

ALTER TABLE example_db.my_tableADD PARTITION p1 VALUES LESS THAN ("2014-01-01");

增加分区,使用新的分桶数。

ALTER TABLE example_db.my_tableADD PARTITION p1 VALUES LESS THAN ("2015-01-01")DISTRIBUTED BY HASH(k1) BUCKETS 20;

增加分区,使用新的副本数。

ALTER TABLE example_db.my_tableADD PARTITION p1 VALUES LESS THAN ("2015-01-01")("replication_num"="1");

修改分区副本数。

ALTER TABLE example_db.my_tableMODIFY PARTITION p1 SET("replication_num"="1");

批量修改指定分区。

ALTER TABLE example_db.my_tableMODIFY PARTITION (p1, p2, p4) SET("in_memory"="true");

批量修改所有分区。

ALTER TABLE example_db.my_tableMODIFY PARTITION (*) SET("storage_medium"="HDD");

删除分区。

ALTER TABLE example_db.my_tableDROP PARTITION p1;

增加一个指定上下界的分区。

ALTER TABLE example_db.my_tableADD PARTITION p1 VALUES [("2014-01-01"), ("2014-02-01"));

3 rollup
创建 index: example_rollup_index,基于 base index(k1, k2, k3, v1, v2)。列式存储。

ALTER TABLE example_db.my_tableADD ROLLUP example_rollup_index(k1, k3, v1, v2)PROPERTIES("storage_type"="column");

创建 index: example_rollup_index2,基于 example_rollup_index(k1, k3, v1, v2)。

ALTER TABLE example_db.my_tableADD ROLLUP example_rollup_index2 (k1, v1)FROM example_rollup_index;

创建 index: example_rollup_index3,基于 base index (k1, k2, k3, v1), 自定义 rollup 超时时间一小时。

ALTER TABLE example_db.my_tableADD ROLLUP example_rollup_index(k1, k3, v1)PROPERTIES("storage_type"="column", "timeout" = "3600");

删除 index: example_rollup_index2。

ALTER TABLE example_db.my_tableDROP ROLLUP example_rollup_index2;

4 Schema Change
向 example_rollup_index 的 col1 后添加一个 key 列 new_col(非聚合模型)。

ALTER TABLE example_db.my_tableADD COLUMN new_col INT KEY DEFAULT "0" AFTER col1TO example_rollup_index;

向 example_rollup_index 的 col1 后添加一个 value 列 new_col(非聚合模型)。

ALTER TABLE example_db.my_tableADD COLUMN new_col INT DEFAULT "0" AFTER col1TO example_rollup_index;

向 example_rollup_index 的 col1 后添加一个 key 列 new_col(聚合模型)。
ALTER TABLE example_db.my_table

ADD COLUMN new_col INT DEFAULT "0" AFTER col1TO example_rollup_index;

向 example_rollup_index 的 col1 后添加一个 value 列 new_col SUM 聚合类型(聚合模型)。

ALTER TABLE example_db.my_tableADD COLUMN new_col INT SUM DEFAULT "0" AFTER col1TO example_rollup_index;

向 example_rollup_index 添加多列(聚合模型)。

ALTER TABLE example_db.my_tableADD COLUMN (col1 INT DEFAULT "1", col2 FLOAT SUM DEFAULT "2.3")TO example_rollup_index;

从 example_rollup_index 删除一列。

ALTER TABLE example_db.my_tableDROP COLUMN col2FROM example_rollup_index;

修改 base index 的 col1 列的类型为 BIGINT,并移动到 col2 列后面。

ALTER TABLE example_db.my_tableMODIFY COLUMN col1 BIGINT DEFAULT "1" AFTER col2;

修改 base index 的 val1 列最大长度。原 val1 为 (val1 VARCHAR(32) REPLACE DEFAULT “abc”)。

ALTER TABLE example_db.my_tableMODIFY COLUMN val1 VARCHAR(64) REPLACE DEFAULT "abc";

重新排序 example_rollup_index 中的列(设原列顺序为:k1, k2, k3, v1, v2)。

ALTER TABLE example_db.my_tableORDER BY (k3,k1,k2,v2,v1)FROM example_rollup_index;

同时执行两种操作。

ALTER TABLE example_db.my_tableADD COLUMN v2 INT MAX DEFAULT "0" AFTER k2 TO example_rollup_index,ORDER BY (k3,k1,k2,v2,v1) FROM example_rollup_index;

修改表的 bloom filter 列。

ALTER TABLE example_db.my_tableSET ("bloom_filter_columns"="k1,k2,k3");

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

ALTER TABLE example_db.my_tableDROP COLUMN col2PROPERTIES ("bloom_filter_columns"="k1,k2,k3");

修改表的 Colocate 属性。

ALTER TABLE example_db.my_tableSET ("colocate_with" = "t1");

将表的分桶方式由 Random Distribution 改为 Hash Distribution。

ALTER TABLE example_db.my_tableSET ("distribution_type" = "hash");

修改表的动态分区属性(支持未添加动态分区属性的表添加动态分区属性)。

ALTER TABLE example_db.my_tableSET ("dynamic_partition.enable" = "false");

如果需要在未添加动态分区属性的表中添加动态分区属性,则需要指定所有的动态分区属性。

ALTER TABLE example_db.my_tableSET ("dynamic_partition.enable" = "true","dynamic_partition.time_unit" = "DAY","dynamic_partition.end" = "3","dynamic_partition.prefix" = "p","dynamic_partition.buckets" = "32");

修改表的 in_memory 属性。

ALTER TABLE example_db.my_tableSET ("in_memory" = "true");

5 rename
将名为 table1 的表修改为 table2。

ALTER TABLE table1 RENAME table2;

将表 example_table 中名为 rollup1 的 rollup index 修改为 rollup2。

ALTER TABLE example_table RENAME ROLLUP rollup1 rollup2;

将表 example_table 中名为 p1 的 partition 修改为 p2。

ALTER TABLE example_table RENAME PARTITION p1 p2;

6 index
在 table1 上为 siteid 创建 bitmap 索引。

ALTER TABLE table1ADD INDEX index_name (siteid) [USING BITMAP] COMMENT 'balabala';

删除 table1 上的 siteid 列的 bitmap 索引。

7 swap
将 table1 与 table2 原子替换。

ALTER TABLE table1 SWAP WITH table2;

改key语句
修改指定 index 的列类型以及列位置 (MODIFY COLUMN)
语法:

ALTER TABLE [database.]tableMODIFY COLUMN column_name column_type [KEY | agg_type] [NULL | NOT NULL] [DEFAULT "default_value"][AFTER column_name|FIRST][FROM rollup_index_name][PROPERTIES ("key"="value", ...)]