• DDL语句
    • Create Database
    • Create Table
    • Drop Database
    • Drop Table
    • Alter Database
    • Alter Table
    • Cancel Alter

    DDL语句

    Create Database

    该语句用于新建数据库(database)

    语法:

    1. CREATE DATABASE [IF NOT EXISTS] db_name;

    举例:

    1. 新建数据库 db_test
    2. CREATE DATABASE db_test;

    Create Table

    该语句用于创建表(table)

    语法:

    1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
    2. (column_definition[, column_definition, ...])
    3. [ENGINE = [olap|mysql|broker]]
    4. [key_desc]
    5. [partition_desc]
    6. [distribution_desc]
    7. [PROPERTIES ("key"="value", ...)]
    8. [BROKER PROPERTIES ("key"="value", ...)];

    Column_definition

    语法:

    1. col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"]
    • col_name:列名称

    • col_type:列类型,可以是INT,DOUBLE,DATE等,参考数据类型章节。

    • agg_type:聚合类型,目前支持SUM,MAX,MIN、REPLACE和HLL_UNION(仅用于HLL列,为HLL独有的聚合方式)5种。聚合类型是可选选项,如果不指定,说明该列是维度列(key列),否则是事实列(value列)。建表语句中,所有的key列必须在value列之前,一张表可以没有value列,这样的表就是维度表,但不能没有key列。该类型只对聚合模型(key_desc的type为AGGREGATE KEY)有用,其它模型不需要指定这个。

    • 是否允许为NULL: 默认允许为NULL,导入时用\N来表示

    说明:

    在导入的时候,Palo会自动把相同key列对应的value列按照指定的聚合方法合并(针对聚合模型)。比如,Palo中有一张表包含三列:k1,k2和v,其中v是int类型的value列,聚合方法是SUM,k1和k2是key列。假如原本有数据如下

    1. | k1 | k2 | v |
    2. |-----|-----|-----|
    3. | 1 | 1 | 10 |
    4. | 1 | 2 | 20 |
    5. | 2 | 2 | 30 |

    新导入的数据如下:

    1. | k1 | k2 | v |
    2. |-----|-----|-----|
    3. | 1 | 1 | 5 |
    4. | 2 | 2 | 10 |
    5. | 3 | 1 | 5 |

    导入以后,Palo中的数据如下

    1. | k1 | k2 | v |
    2. |-----|-----|-----|
    3. | 1 | 1 | 15 |
    4. | 1 | 2 | 20 |
    5. | 2 | 2 | 40 |
    6. | 3 | 1 | 5 |

    可以看到,在k1和k2相同的时候,v列使用SUM聚合方法做了聚合。

    ENGINE类型

    说明:

    ENGINE默认为olap,也就是由Palo提供存储支持,也可以选择mysql,broker。

    mysql类型用来存储维表,由用户自己维护,方便修改。查询的时候,Palo可以自动实现mysql表和olap表的连接操作。使用mysql类型,需要提供以下properties信息

    1. PROPERTIES (
    2. "host" = "mysql_server_host",
    3. "port" = "mysql_server_port",
    4. "user" = "your_user_name",
    5. "password" = "your_password",
    6. "database" = "database_name",
    7. "table" = "table_name"
    8. )
    1. table”条目中的“table_name”是mysql中的真实表名。而CREATE TABLE语句中的table_name是该mysql表在Palo中的名字,二者可以不同。

    broker类型表示表的访问需要通过指定的broker, 需要在 properties 提供以下信息

    1. PROPERTIES (
    2. "broker_name" = "broker_name",
    3. "paths" = "file_path1[,file_path2]",
    4. "column_separator" = "value_separator",
    5. "line_delimiter" = "value_delimiter"

    另外还可以提供Broker需要的Property信息,通过BROKER PROPERTIES来传递,例如HDFS需要传入

    1. BROKER PROPERTIES(
    2. "username" = "name",
    3. "password" = "password"
    4. )

    这个根据不同的Broker类型,需要传入的内容也不相同

    其中"paths" 中如果有多个文件,用逗号[,]分割。如果文件名中包含逗号,那么使用 %2c 来替代。如果文件名中包含 %,使用 %25 代替。现在文件内容格式支持CSV,支持GZ,BZ2,LZ4,LZO(LZOP) 压缩格式。

    key_desc

    语法:

    1. key_type(k1[,k2 ...])

    说明:

    数据按照指定的key列进行排序,且根据不同的key_type具有不同特性。

    key_type支持一下类型:

    • AGGREGATE KEY:key列相同的记录,value列按照指定的聚合类型进行聚合,适合报表、多维分析等业务场景。

    • UNIQUE KEY:key列相同的记录,value列按导入顺序进行覆盖,适合按key列进行增删改查的点查询业务。

    • DUPLICATE KEY:key列相同的记录,同时存在于Palo中,适合存储明细数据或者数据无聚合特性的业务场景。

    partition_desc

    1. 语法:
    1. PARTITION BY RANGE (k1)
    2. (
    3. PARTITION partition_name VALUES LESS THAN MAXVALUE|("value1") [("key"="value")],
    4. PARTITION partition_name VALUES LESS THAN MAXVALUE|("value2") [("key"="value")],
    5. ...
    6. )
    1. Partition使用指定的key列和指定的数据范围对数据进行分区,每个分区在物理上对应不同的数据块,便于快速过滤和按分区删除等操作。目前只支持按Range分区,只能有一个分区列,分区列必须是key列。注意,最后一个PARTITION从句之后没有逗号。
    1. 说明:
    • 分区名称仅支持字母开头,并且只能由字母、数字和下划线组成

    • 目前只支持以下类型的列作为分区列,且只能指定一个分区列TINYINT, SAMLLINT, INT, BIGINT, LARGEINT, DATE, DATETIME

    • 分区为左闭右开区间,首个分区的左边界做为最小值

    • 如果指定了分区,无法确定分区范围的导入数据会被过滤掉

    • 每个分区后面的key-value键值对可以设置该分区的一些属性,目前支持如下属性:

    • storage_medium:用于指定该分区的初始存储介质,可选择SSD或HDD。默认为HDD。单节点SSD容量为50G,可以根据性能需求和数据量选择存储介质。

    • storage_cooldown_time:当设置存储介质为SSD时,指定该分区在SSD上的存储到期时间。默认存放7天。格式为:"yyyy-MM-dd HH:mm:ss"。到期后数据会自动迁移到HDD上。

    • replication_num:指定分区的副本数。默认为3

    distribution_desc

    1. distribution用来指定如何分桶,可以选择Random分桶和Hash分桶两种分桶方式。
    1. Random分桶语法:
    1. DISTRIBUTED BY RANDOM [BUCKETS num]
    1. Hash分桶语法:
    1. DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num]
    1. 说明:
    • Random使用所有key列进行哈希分桶,默认分区数为10。Hash使用指定的key列进行分桶,默认分区数为10。如果ENGINE类型为olap,必须指定分桶方式;如果是mysql则无须指定。

    • 不建议使用Random分桶,建议使用Hash分桶。

    properties

    1. 如果ENGINE类型为olap,则可以在properties中指定行存或列存
    1. 如果ENGINE类型为olap,且没有指定partition信息,可以在properties设置存储介质、存储到期时间和副本数等属性。如果指定了partition信息,需要为每个partition分别指定属性值,参考partition_desc
    1. PROPERTIES (
    2. "storage_medium" = "[SSD|HDD]",
    3. ["storage_cooldown_time" = "yyyy-MM-dd HH:mm:ss"],
    4. ["replication_num" = "3"]
    5. )
    1. 如果ENGINE类型为 olap, 并且 storage_type column, 可以指定某列使用 bloom filter 索引。bloom filter 索引仅适用于查询条件为 in equal 的情况,该列的值越分散效果越好。目前只支持以下情况的列:除了 TINYINT FLOAT DOUBLE 类型以外的 key 列及聚合方法为 REPLACE value
    1. PROPERTIES (
    2. "bloom_filter_columns"="k1,k2,k3"

    关于建表的补充说明

    • Partition和Distribution的说明:

    • Palo支持复合分区,第一级称为Partition,对应建表语句中的partition_desc从句;第二级称为Distribution,对应建表语句中的distribution_desc从句。Partition是可选的,如果建表时没有指定Partition,系统会自动创建唯一的一个Partition。Distribution必须显式指定。在以下场景中推荐创建Partition:

    • 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N天的数据)。使用复合分区,可以通过删除历史分区来达到目的。

    • 解决数据倾斜问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据。

    • 如有按时间维度进行数据划分、导入、查询、删除、历史数据回溯等业务需求,推荐使用复合分区功能。

    • 合理的表模式:

    Palo中使用类似前缀索引的结构来提高查询性能。数据在Palo内部是按照key列排序的,并且组织为一个个Data Block。每个Data Block的第一行的前几列会被用作这个Data Block的索引,在数据导入时创建。该索引可以帮助Palo快速过滤一些Data Block。考虑到索引大小等因素,Palo最多使用一行的前36个字节作为索引,遇到VARCHAR类型则会中断,并且VARCHAR类型最多只使用字符串的前20个字节。下面举例说明。

    表1的schema:

    DDL语句 - 图1)

    前三列的长度和为(4+8+24=)36,正好36字节,所以前三列被用作前缀索引。

    表2的schema:

    DDL语句 - 图2)

    前两列的长度为(4+8=)12,没有达到36,但是第三列为varchar,所以前三列被用作索引,其中k3只去前20字节。

    表3的schema:

    DDL语句 - 图3)

    该表第一列是varchar类型,所以只有k3列的前20字节作为索引。

    表4的schema:

    DDL语句 - 图4)

    前四列的长度和为(8+8+8+8=)32,如果加上第五列(8个字节),就会超过36字节。所以只有前四列被用作索引。

    如果对于表2和表3执行同样的语句:

    1. SELECT * from tbl WHERE k1 = 12345;

    表2的性能会明显由于表3,因为在表2中可以用到k1索引,而表3只有k3作为索引,该查询会进行扫全表的操作。因此,在建表时,应该尽量将频繁使用,选择度高的列放在前面,尽量不要将varchar类型放在前几列,尽量使用整型作为索引列。

    举例:

    1.创建一个olap表,使用Random分桶,使用列存,相同key的记录进行聚合

    1. CREATE TABLE example_db.table_random
    2. (
    3. k1 TINYINT,
    4. k2 DECIMAL(10, 2) DEFAULT "10.5",
    5. v1 CHAR(10) REPLACE,
    6. v2 INT SUM
    7. )
    8. ENGINE=olap
    9. AGGREGATE KEY(k1, k2)
    10. DISTRIBUTED BY RANDOM BUCKETS 32
    11. PROPERTIES ("storage_type"="column");
    1. 2.创建一个olap表,使用Hash分桶,使用行存,相同key的记录进行覆盖。设置初始存储介质和存放到期时间。
    1. CREATE TABLE example_db.table_hash
    2. (
    3. k1 BIGINT,
    4. k2 LARGEINT,
    5. v1 VARCHAR(2048),
    6. v2 SMALLINT DEFAULT "10"
    7. )
    8. ENGINE=olap
    9. UNIQUE KEY(k1, k2)
    10. DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
    11. PROPERTIES(
    12. "storage_type"="row"
    13. "storage_medium" = "SSD",
    14. "storage_cooldown_time" = "2015-06-04 00:00:00"
    15. );
    1. 3.创建一个olap表,使用Key Range分区,使用Hash分桶。默认使用列存。相同key的记录同时存在。设置初始存储介质和存放到期时间。
    1. CREATE TABLE example_db.table_range
    2. (
    3. k1 DATE,
    4. k2 INT,
    5. k3 SMALLINT,
    6. v1 VARCHAR(2048),
    7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
    8. )
    9. ENGINE=olap
    10. DUPLICATE KEY(k1, k2, k3)
    11. PARTITION BY RANGE (k1)
    12. (
    13. PARTITION p1 VALUES LESS THAN ("2014-01-01")
    14. ("storage_medium" = "SSD", "storage_cooldown_time" = "2015-06-04 00:00:00"),
    15. PARTITION p2 VALUES LESS THAN ("2014-06-01")
    16. ("storage_medium" = "SSD", "storage_cooldown_time" = "2015-06-04 00:00:00"),
    17. PARTITION p3 VALUES LESS THAN ("2014-12-01")
    18. )
    19. DISTRIBUTED BY HASH(k2) BUCKETS 32;
    1. 说明:
    1. 这个语句会将数据划分成如下3个分区:
    1. ( { MIN }, {"2014-01-01"} )
    2. [ {"2014-01-01"}, {"2014-06-01"} )
    3. [ {"2014-06-01"}, {"2014-12-01"} )
    1. 不在这些分区范围内的数据将视为非法数据被过滤
    1. 4.创建一个 mysql
    1. CREATE TABLE example_db.table_mysql
    2. (
    3. k1 DATE,
    4. k2 INT,
    5. k3 SMALLINT,
    6. k4 VARCHAR(2048),
    7. k5 DATETIME
    8. )
    9. ENGINE=mysql
    10. PROPERTIES
    11. (
    12. "host" = "127.0.0.1",
    13. "port" = "8239",
    14. "user" = "mysql_user",
    15. "password" = "mysql_passwd",
    16. "database" = "mysql_db_test",
    17. "table" = "mysql_table_test"
    18. )

    5.创建一个数据文件存储在HDFS上的 broker 外部表, 数据使用 "|" 分割,"\n" 换行

    1. CREATE EXTERNAL TABLE example_db.table_broker
    2. (
    3. k1 DATE,
    4. k2 INT,
    5. k3 SMALLINT,
    6. k4 VARCHAR(2048),
    7. k5 DATETIME
    8. )
    9. ENGINE=broker
    10. PROPERTIES (
    11. "broker_name" = "hdfs",
    12. "path" = "hdfs://hdfs_host:hdfs_port/data1,hdfs://hdfs_host:hdfs_port/data2,hdfs://hdfs_host:hdfs_port/data3%2c4",
    13. "column_separator" = "|",
    14. "line_delimiter" = "\n"
    15. )
    16. BROKER PROPERTIES (
    17. "username" = "hdfs_user",
    18. "password" = "hdfs_password"
    19. )

    6.创建一个含有HLL列的表

    1. CREATE TABLE example_db.example_table
    2. (
    3. k1 TINYINT,
    4. k2 DECIMAL(10, 2) DEFAULT "10.5",
    5. v1 HLL HLL_UNION,
    6. v2 HLL HLL_UNION
    7. )
    8. ENGINE=olap
    9. AGGREGATE KEY(k1, k2)
    10. DISTRIBUTED BY RANDOM BUCKETS 32
    11. PROPERTIES ("storage_type"="column");

    Drop Database

    该语句用于删除数据库(database)

    语法:

    1. DROP DATABASE [IF EXISTS] db_name;

    举例:

    1. 删除数据库 db_test
    1. DROP DATABASE db_test;

    Drop Table

    该语句用于删除表(table)

    语法:

    1. DROP TABLE [IF EXISTS] [db_name.]table_name;

    举例:

    1. 1.删除一个 table
    1. DROP TABLE my_table;
    1. 2.如果存在,删除指定 database table
    1. DROP TABLE IF EXISTS example_db.my_table;

    Alter Database

    该语句用于设置指定数据库的配额。(仅管理员使用)

    语法:

    1. ALTER DATABASE db_name SET DATA QUOTA quota;

    举例:

    1. 设置指定数据库数据量配额为1GB
    1. ALTER DATABASE example_db SET DATA QUOTA 1073741824;

    Alter Table

    该语句用于对已有的table进行修改。该语句分为三种操作类型:partition、rollup和schema change。Partition是上文提到的复合分区中的第一级分区;rollup是物化索引相关的操作;schema change用来修改表结构。这三种操作不能同时出现在一条ALTER TABLE语句中。其中schema change和rollup是异步操作,任务提交成功则返回,之后可以使用SHOW ALTER命令查看进度。Partition是同步操作,命令返回表示执行完毕。

    语法:

    1. ALTER TABLE [database.]table alter_clause1[, alter_clause2, ...];

    Alter_clause分为partition、rollup、schema change和rename四种。

    partition支持的操作

    增加分区

    语法:

    1. ADD PARTITION [IF NOT EXISTS] partition_name VALUES LESS THAN [MAXVALUE|("value1")] ["key"="value"] [DISTRIBUTED BY RANDOM [BUCKETS num] | DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num]]

    注意:

    • 分区为左闭右开区间,用户指定右边界,系统自动确定左边界

    • 如果没有指定分桶方式,则自动使用建表使用的分桶方式

    • 如果已经指定分桶方式,则只能修改分桶数,不可修改分桶方式或分桶列

    • ["key"="value"] 部分可以设置分区的一些属性,具体说明见CREATE TABLE

    删除分区

    语法:

    1. DROP PARTITION [IF EXISTS] partition_name

    注意:

    • 使用分区方式的表至少要保留一个分区

    • 执行 DROP PARTITION 一段时间内,可以通过 RECOVER 语句恢复被删除的 partition。详见 RECOVER 语句

    修改分区属性

    语法:

    1. MODIFY PARTITION partition_name SET ("key" = "value", ...)

    说明:

    • 当前支持修改分区的 storage_medium、storage_cooldown_time 和replication_num 三个属性。

    • 建表时没有指定partition时,partition_name同表名。

    rollup支持的操作

    rollup index类似于物化视图。建表完成之后,这张表中没有rollup index,只有一个base index,这个index的name和表名相同。用户可以为一张表建立一个或多个rollup index,每个rollup index包含base index中key和value列的一个子集,Palo会为这个子集生成独立的数据,用来提升查询性能。如果一个查询涉及到的列全部包含在一个rollup index中,Palo会选择扫瞄这个rollup index而不是全部的数据。用户可以根据自己应用的特点选择创建rollup index,rollup支持的操作:

    创建 rollup index

    语法:

    1. ADD ROLLUP rollup_name (column_name1, column_name2, ...) [FROM from_index_name] [PROPERTIES ("key"="value", ...)]

    注意:

    • 如果没有指定from_index_name,则默认从base index创建

    • rollup表中的列必须是from_index中已有的列

    • 在properties中,可以指定存储格式。具体请参阅 CREATE TABLE

    删除 rollup index

    语法:

    1. DROP ROLLUP rollup_name
    2. [PROPERTIES ("key"="value", ...)]

    注意:

    • 不能删除 base index

    • 执行 DROP ROLLUP 一段时间内,可以通过 RECOVER 语句恢复被删除的 rollup index。详见 RECOVER 语句

    schema change

    Schema change操作用来修改表结构,包括添加列、删除列、修改列类型以及调整列顺序等。可以修改base index和rollup index的结构。

    Schema change支持的操作:

    向指定index的指定位置添加一列

    语法:

    1. ADD COLUMN column_name column_type [KEY | agg_type] [DEFAULT "default_value"]
    2. [AFTER column_name|FIRST]
    3. [TO index_name]
    4. [PROPERTIES ("key"="value", ...)]

    注意:

    • 聚合模型如果增加 value 列,需要指定agg_type

    • 非聚合模型如果增加key列,需要指定KEY关键字

    • 不能在rollup index中增加base index中已经存在的列。如有需要,可以重新创建一个 rollup index

    向指定index添加多列

    语法:

    1. ADD COLUMN (column_name1 column_type [KEY | agg_type] DEFAULT "default_value", ...)
    2. [TO index_name]
    3. [PROPERTIES ("key"="value", ...)]

    注意:

    • 聚合模型如果增加 value 列,需要指定agg_type

    • 非聚合模型如果增加key列,需要指定KEY关键字

    • 不能在rollup index中增加base index中已经存在的列,如有需要,可以重新创建一个 rollup index。

    从指定 index 中删除一列

    语法:

    1. DROP COLUMN column_name [FROM index_name]

    注意:

    • 不能删除分区列

    • 如果是从base index中删除列,那么rollup index中如果包含该列,也会被删除

    修改指定index的列类型以及列位置

    语法:

    1. MODIFY COLUMN column_name column_type [KEY | agg_type] [DEFAULT "default_value"]
    2. [AFTER column_name|FIRST]
    3. [FROM index_name]
    4. [PROPERTIES ("key"="value", ...)]

    注意:

    • 聚合类型如果修改value列,需要指定agg_type

    • 非聚合类型如果修改key列,需要指定KEY关键字

    • 只能修改列的类型,列的其他属性维持原样(即其他属性需在语句中按照原属性显式的写出,参考schema change举例5)

    • 分区列不能做任何修改

    • 目前支持以下类型的转换(精度损失由用户保证)。TINYINT, SMALLINT, INT, BIGINT转换成TINYINT, SMALLINT, INT, BIGINT, DOUBLE。LARGEINT转换成DOUBLE 。VARCHAR支持修改最大长度

    • 不支持从NULL转为NOT NULL

    对指定index的列进行重新排序

    语法:

    1. ORDER BY (column_name1, column_name2, ...)
    2. [FROM index_name]
    3. [PROPERTIES ("key"="value", ...)]

    注意:

    • index中的所有列都要写出来

    • value列在key列之后

    rename

    Rename操作用来修改表名、rollup index名称和partition名称

    Rename支持的操作:

    修改表名

    语法:

    1. RENAME new_table_name

    修改rollup index名称

    语法:

    1. RENAME ROLLUP old_rollup_name new_rollup_name

    修改partition名称

    语法:

    1. RENAME PARTITION old_partition_name new_partition_name

    举例:

    1. 1.增加分区, 现有分区 [MIN, 2013-01-01),增加分区[2013-01-01, 2014-01-01),使用默认分桶方式
    1. ALTER TABLE example_db.my_table
    2. ADD PARTITION p1 VALUES LESS THAN ("2014-01-01");
    1. 2.增加分区,使用新的分桶方式
    1. ALTER TABLE example_db.my_table
    2. ADD PARTITION p1 VALUES LESS THAN ("2015-01-01")
    3. DISTRIBUTED BY RANDOM BUCKETS 20;
    1. 3.删除分区
    1. ALTER TABLE example_db.my_table
    2. DROP PARTITION p1;
    1. 4.创建index: example_rollup_index,基于 base indexk1,k2,k3,v1,v2),列式存储。
    1. ALTER TABLE example_db.my_table
    2. ADD ROLLUP example_rollup_index(k1, k3, v1, v2)
    3. PROPERTIES("storage_type"="column");
    1. 5.创建index: example_rollup_index2,基于example_rollup_indexk1,k3,v1,v2
    1. ALTER TABLE example_db.my_table
    2. ADD ROLLUP example_rollup_index2 (k1, v1)
    3. FROM example_rollup_index;
    1. 6.删除index: example_rollup_index2
    1. ALTER TABLE example_db.my_table
    2. DROP ROLLUP example_rollup_index2;
    1. 7.example_rollup_indexcol1后添加一个keynew_col(非聚合模型)
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN new_col INT KEY DEFAULT "0" AFTER col1
    3. TO example_rollup_index;
    1. 8.example_rollup_indexcol1后添加一个valuenew_col(非聚合模型)
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN new_col INT DEFAULT "0" AFTER col1
    3. TO example_rollup_index;
    1. 9.example_rollup_indexcol1后添加一个keynew_col(聚合模型)
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN new_col INT DEFAULT "0" AFTER col1
    3. TO example_rollup_index;
    1. 10.example_rollup_indexcol1后添加一个valuenew_col SUM聚合类型(聚合模型)
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN new_col INT SUM DEFAULT "0" AFTER col1
    3. TO example_rollup_index;
    1. 11. example_rollup_index 添加多列(聚合模型)
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN (col1 INT DEFAULT "1", col2 FLOAT SUM DEFAULT "2.3")
    3. TO example_rollup_index;
    1. 12.example_rollup_index删除一列
    1. ALTER TABLE example_db.my_table
    2. DROP COLUMN col2
    3. FROM example_rollup_index;
    1. 13.修改base indexcol1列的类型为BIGINT,并移动到col2列后面
    1. ALTER TABLE example_db.my_table
    2. MODIFY COLUMN col1 BIGINT DEFAULT "1" AFTER col2;
    1. 14.修改base indexval1列最大长度。原val1为(val1 VARCHAR(32) REPLACE DEFAULT "abc")
    1. ALTER TABLE example_db.my_table
    2. MODIFY COLUMN val1 VARCHAR(64) REPLACE DEFAULT "abc";
    1. 15.重新排序example_rollup_index中的列(设原列顺序为:k1,k2,k3,v1,v2
    1. ALTER TABLE example_db.my_table
    2. ORDER BY (k3,k1,k2,v2,v1)
    3. FROM example_rollup_index;
    1. 16.同时执行两种操作
    1. ALTER TABLE example_db.my_table
    2. ADD COLUMN v2 INT MAX DEFAULT "0" AFTER k2 TO example_rollup_index,
    3. ORDER BY (k3,k1,k2,v2,v1) FROM example_rollup_index;
    1. 17.修改表的 bloom filter
    1. ALTER TABLE example_db.my_table
    2. PROPERTIES ("bloom_filter_columns"="k1,k2,k3");
    1. 18.将名为 table1 的表修改为 table2
    1. ALTER TABLE table1 RENAME table2;
    1. 19.将表 example_table 中名为 rollup1 rollup index 修改为 rollup2
    1. ALTER TABLE example_table RENAME ROLLUP rollup1 rollup2;
    1. 20.将表 example_table 中名为 p1 partition 修改为 p2
    1. ALTER TABLE example_table RENAME PARTITION p1 p2;

    Cancel Alter

    该语句用于撤销一个alter操作

    撤销alter table column (即schema change)语法:

    1. CANCEL ALTER TABLE COLUMN FROM db_name.table_name

    撤销alter table rollup操作

    1. CANCEL ALTER TABLE ROLLUP FROM db_name.table_name

    举例:

    1. 1.撤销针对 my_table ALTER COLUMN 操作。
    1. CANCEL ALTER TABLE COLUMN
    2. FROM example_db.my_table;
    1. 2.撤销 my_table 下的 ADD ROLLUP 操作。
    1. CANCEL ALTER TABLE ROLLUP
    2. FROM example_db.my_table;