华为云用户手册

  • sum(expression) 描述:所有输入行的expression总和。 返回类型: 通常情况下输入数据类型和输出数据类型是相同的,但以下情况会发生类型转换: 对于SMALLINT或INT输入,输出类型为BIGINT。 对于BIGINT输入,输出类型为NUMBER 。 对于浮点数输入,输出类型为DOUBLE PRECISION。 示例: 1 2 3 4 5 SELECT SUM(ss_ext_tax) FROM tpcds.STORE_SALES; sum -------------- 213267594.69 (1 row)
  • 条件表达式 在执行SQL语句时,可通过条件表达式筛选出符合条件的数据。 条件表达式主要有以下几种: CASE CASE表达式是条件表达式,类似于其他编程语言中的CASE语句。 CASE表达式的语法图请参考图1。 图1 case::= CASE子句可以用于合法的表达式中。condition是一个返回BOOLEAN数据类型的表达式: 如果结果为真,CASE表达式的结果就是符合该条件所对应的result。 如果结果为假,则以相同方式处理随后的WHEN或ELSE子句。 如果各WHEN condition都不为真,表达式的结果就是在ELSE子句执行的result。如果省略了ELSE子句且没有匹配的条件,结果为NULL。 case when嵌套使用时不建议超过3层,解析器在解析时需要将所有涉及字段递归展开,递归过深可能导致内存占用过大。 如果case when很复杂可以直接使用子查询的方式替换,参考子查询表达式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CREATE TABLE tpcds.case_when_t1(CW_COL1 INT) DISTRIBUTE BY HASH (CW_COL1); INSERT INTO tpcds.case_when_t1 VALUES (1), (2), (3); SELECT * FROM tpcds.case_when_t1; cw_col1 --------- 3 1 2 (3 rows) SELECT CW_COL1, CASE WHEN CW_COL1=1 THEN 'one' WHEN CW_COL1=2 THEN 'two' ELSE 'other' END FROM tpcds.case_when_t1; cw_col1 | case ---------+------- 3 | other 1 | one 2 | two (3 rows) DROP TABLE tpcds.case_when_t1; DECODE DECODE的语法图请参见图2。 图2 decode::= 将表达式base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 示例请参见条件表达式函数。 1 2 3 4 5 SELECT DECODE('A','A',1,'B',2,0); case ------ 1 (1 row) COALESCE COALESCE的语法图请参见图3。 图3 coalesce::= COALESCE返回它的第一个非NULL的参数值。如果参数都为NULL,则返回NULL。它常用于在显示数据时用缺省值替换NULL。和CASE表达式一样,COALESCE只计算用来判断结果的参数,即在第一个非空参数右边的参数不会被计算。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE tpcds.c_tabl(description varchar(10), short_description varchar(10), last_value varchar(10)) DISTRIBUTE BY HASH (last_value); INSERT INTO tpcds.c_tabl VALUES('abc', 'efg', '123'); INSERT INTO tpcds.c_tabl VALUES(NULL, 'efg', '123'); INSERT INTO tpcds.c_tabl VALUES(NULL, NULL, '123'); SELECT description, short_description, last_value, COALESCE(description, short_description, last_value) FROM tpcds.c_tabl ORDER BY 1, 2, 3, 4; description | short_description | last_value | coalesce -------------+-------------------+------------+---------- abc | efg | 123 | abc | efg | 123 | efg | | 123 | 123 (3 rows) DROP TABLE tpcds.c_tabl; 如果description不为NULL,则返回description的值,否则计算下一个参数short_description;如果short_description不为NULL,则返回short_description的值,否则计算下一个参数last_value;如果last_value不为NULL,则返回last_value的值,否则返回(none)。 1 2 3 4 5 SELECT COALESCE(NULL,'Hello World'); coalesce --------------- Hello World (1 row) NULLIF NULLIF的语法图请参见图4。 图4 nullif::= 只有当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE tpcds.null_if_t1 ( NI_VALUE1 VARCHAR(10), NI_VALUE2 VARCHAR(10) ) DISTRIBUTE BY HASH (NI_VALUE1); INSERT INTO tpcds.null_if_t1 VALUES('abc', 'abc'); INSERT INTO tpcds.null_if_t1 VALUES('abc', 'efg'); SELECT NI_VALUE1, NI_VALUE2, NULLIF(NI_VALUE1, NI_VALUE2) FROM tpcds.null_if_t1 ORDER BY 1, 2, 3; ni_value1 | ni_value2 | nullif -----------+-----------+-------- abc | abc | abc | efg | abc (2 rows) DROP TABLE tpcds.null_if_t1; 如果value1等于value2则返回NULL,否则返回value1。 1 2 3 4 5 SELECT NULLIF('Hello','Hello World'); nullif -------- Hello (1 row) GREATEST(最大值),LEAST(最小值) GREATEST的语法图请参见图5。 图5 greatest::= 从一个任意数字表达式的列表里选取最大的数值。 1 2 3 4 5 SELECT greatest(9000,155555,2.01); greatest ---------- 155555 (1 row) LEAST的语法图请参见图6。 图6 least::= 从一个任意数字表达式的列表里选取最小的数值。 以上的数字表达式必须都可以转换成一个普通的数据类型,该数据类型将是结果类型。 列表中的NULL值将被忽略。只有所有表达式的结果都是NULL的时候,结果才是NULL。 1 2 3 4 5 SELECT least(9000,2); least ------- 2 (1 row) 示例请参见条件表达式函数。 NVL NVL的语法图请参见图7。 图7 nvl::= 如果value1为NULL则返回value2,如果value1非NULL,则返回value1。 示例: 1 2 3 4 5 SELECT nvl(null,1); nvl ----- 1 (1 row) 1 2 3 4 5 SELECT nvl ('Hello World' ,1); nvl --------------- Hello World (1 row) IF IF的语法图请参见图8。 图8 if::= 当bool_expr为true时,返回expr1,否则返回expr2。 示例请参见条件表达式函数。 IFNULL IFNULL的语法图请参见图9。 图9 ifnull::= 当expr1不为NULL时,返回expr1,否则返回expr2。 示例请参见条件表达式函数。 父主题: 表达式
  • 列操作示例 创建示例表warehouse_t。 1 2 3 4 5 6 7 8 9 10 11 DROP TABLE IF EXISTS warehouse_t; CREATE TABLE warehouse_t ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE, W_WAREHOUSE_SQ_FT INTEGER , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) DEFAULT 'GA', W_ZIP CHAR(10) ); 向表warehouse_t中增加一个新的字段。 1 ALTER TABLE warehouse_t ADD W_GOODS_CATEGORY int; 修改表中列名信息以及列字段信息。 1 ALTER TABLE warehouse_t CHANGE W_GOODS_CATEGORY W_GOODS_CATEGORY2 DECIMAL NOT NULL COMMENT 'W_GOODS_CATEGORY'; 为表warehouse_t增加主键。 1 ALTER TABLE warehouse_t ADD PRIMARY KEY(w_warehouse_name); 重命名列。 1 ALTER TABLE warehouse_t RENAME W_ZIP TO new_W_ZIP; 向表中增加多列。 1 ALTER TABLE warehouse_t ADD (W_COMMENT VARCHAR(117) NOT NULL, W_COUNT int); 修改表字段的数据类型,并将字段约束设置为非空。 1 ALTER TABLE warehouse_t MODIFY W_WAREHOUSE_SQ_FT varchar(20) NOT NULL; 为表的指定列添加not null约束。 1 ALTER TABLE warehouse_t ALTER COLUMN W_COUNTY SET NOT NULL; 从表中删除一个字段。 1 ALTER TABLE warehouse_t DROP COLUMN W_STATE; 为warehouse_t表增加一个带有on update的timestamp列。 1 ALTER TABLE warehouse_t ADD COLUMN C_TIME timestamp on update current_timestamp; 将warehouse_t表中带有on update的timestamp列删除。 1 ALTER TABLE warehouse_t MODIFY COLUMN C_TIME timestamp on update NULL;
  • 参数说明 表1 ALTER TABLE参数说明 参数 描述 取值范围 IF EXISTS 如果表名不存在时返回一个提示而不是错误。 - ONLY 仅对指定的表名执行操作。 如果不使用ONLY关键字, 该表及其所有子表都将会被更改。 需注意:只允许在父表或子表中添加或删除列,或更改列的类型。 父表及其后代表必须始终具有相同的列和类型。 - table_name 需要修改的表名称。 可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为 有效的表名。 new_table_name 表的新名称。 字符串,需符合标识符命名规范。 column_name,column_1_name, column_2_name 现有的或新字段的名称。 有效的字段名。 new_column_name 指定列的新名称。 字符串,需符合标识符命名规范。 constraint_name 约束的名称。 有效的约束名。 new_constraint_name 表约束的新名称。 字符串,需符合标识符命名规范。 schema_name 表所在的模式名称。 有效的模式名 new_schema 修改后新的模式名称。 有效的模式名。 index_name 索引名称。 有效的索引名。 new_owner 表的新所有者的名称。 有效的用户名或角色名。 new_tablespace 表所属的新表空间的名称。 有效的表空间名。 data_type 新字段的类型,或者现有字段的新类型。 字符串,需符合标识符命名规范。 storage_parameter 表的存储参数。 参见表2。 compress_mode 表字段的压缩可选项,当前仅对行存表有效。该子句指定该字段优先使用的压缩算法 - collation 字段排序规则名称。可选字段COLLATE指定了新字段的排序规则,如果省略,排序规则为新字段的默认类型。 - USING expression USING子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个USING子句。 - NOT NULL | NULL 设置列是否允许空值。 - integer 带符号的整数常值。当使用PERCENT时表示按照表数据的百分比收集统计信息。 0~100 attribute_option 属性选项。 - PLAIN | EXTERNAL | EXTENDED | MAIN 字段存储模式。 PLAIN必须用于定长的数值(比如integer)并且是内联的、不压缩的。 MAIN用于内联、可压缩的数据。 EXTERNAL用于外部保存、不压缩的数据。使用EXTERNAL将令在text和bytea字段上的子字符串操作更快,但付出的代价是增加了存储空间。 EXTENDED用于外部的压缩数据,EXTENDED是大多数支持非PLAIN存储的数据的缺省。 - CHECK ( expression ) 每次将要插入的新行或者将要被更新的行必须使表达式结果为真才能成功,否则会抛出一个异常并且不会修改数据库。 声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。 目前,CHECK表达式不能包含子查询也不能引用除当前行字段之外的变量。 - DEFAULT default_expr 给字段指定缺省值。 缺省表达式的数据类型必须和字段类型匹配。 缺省表达式将被用于任何未声明该字段数值的插入操作。如果没有指定缺省值则缺省值为NULL 。 default_expr中若使用后缀操作符(如!),需使用括号括起来。 - UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE ( column_name [, ... ] ) [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE约束表示表里的一个或多个字段的组合必须在全表范围内唯一。 其中[ NULLS [ NOT ] DISTINCT | NULLS IGNORE ]字段用来指定Unique唯一索引中索引列NULL值的处理方式。具体可参考表3。 默认取值:该参数默认取值为空,即NULL值可重复插入。 - PRIMARY KEY index_parameters PRIMARY KEY ( column_name [, ... ] ) index_parameters 主键约束表明表中的一个或者一些字段只能包含唯一(不重复)的非NULL值。 - DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE 设置该约束是否可推迟,列存暂不支持。 DEFERRABLE:可以推迟到事务结尾使用SET CONSTRAINTS命令检查。 NOT DEFERRABLE:在每条命令之后马上检查。 INITIALLY IMMEDIATE:那么每条语句之后就立即检查它。 INITIALLY DEFERRED:只有在事务结尾才检查它。 - WITH ( {storage_parameter = value} [, ... ] ) 为表或索引指定一个可选的存储参数。 - COMPRESS|NOCOMPRESS NOCOMPRESS:如果指定关键字NOCOMPRESS则不会修改表的现有压缩特性。 COMPRESS:如果指定COMPRESS关键字,则对该表进行批量插入元组时触发该特性。 - CASCADE 级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)。 - RESTRICT 如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。 - cache_policy 表缓存策略,仅存算分离3.0版本支持。 默认值为ALL。 取值范围: ALL: 对整个表进行热缓存。 NONE:对整个表进行冷缓存。 HPN:N分区表中前N个分区会被热缓存,其余分区进行冷缓存。 HPL:P1, P2, ... 分区表中在缓存策略中被指定名称的分区会被热缓存,其余分区进行冷缓存。 说明: 对于外表和非分区内表只支持ALL和NONE两种缓存策略。 仅range和list分区内表支持HPN和HPL缓存策略。 表2 storage_parameter参数说明 storage_parameter 参数 参数项 描述 取值范围 分区管理新增的两个选项 PERIOD 设置分区管理中自动创建分区的周期。 说明: 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动创建分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动创建分区功能,但是在自动删除分区功能存在的情况下,不支持关闭自动创建分区功能。 interval类型。 PERIOD的范围要求以及开启该功能的约束请参考表2中的PERIOD参数。 TTL 设置分区管理中自动删除分区的分区过期时间。 说明: 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动删除分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动删除分区功能。 interval类型。 TTL的范围要求以及开启该功能的约束请参考表2中的TTL参数。 turbo存储格式列存表新增的选项 enable_turbo_store 设置列存表是否为turbo存储格式。该选项仅9.1.0.100及以上集群版本支持。 说明: 3.0普通列存表不支持设置turbo存储格式,仅3.0 hstore_opt表支持turbo存储格式。 2.0版本列存表无限制。 - 唯一索引中索引列NULL值的处理方式的说明如下: [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ]字段用来指定Unique唯一索引中索引列NULL值的处理方式。 在对插入的新数据和表中原始数据进行列的等值比较时,对于NULL值有以下三种处理方式: NULLS DISTINCT:NULL值互不相等,即NULL值可重复插入。 NULLS NOT DISTINCT:NULL值相等。若索引列全为NULL,则NULL值不可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 NULLS IGNORE:在等值比较时跳过NULL值。若索引列全为NULL,则NULL值可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 表3 唯一索引中索引列NULL值的处理方式 字段控制 索引列全为NULL 部分索引列为NULL NULLS DISTINCT 可重复插入 可重复插入 NULLS NOT DISTINCT 不可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 NULLS IGNORE 可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功
  • 其他参数的选项 列约束column_constraint为: 1 2 3 4 5 6 7 8 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters | PRIMARY KEY index_parameters } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 列的压缩可选项compress_mode为: 1 [ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS ] 根据已有唯一索引为表增加主键约束或唯一约束table_constraint_using_index为: 1 2 3 [ CONSTRAINT constraint_name ] { UNIQUE | PRIMARY KEY } USING INDEX index_name [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 增加外键约束REFEREN CES 为: 1 2 [ CONSTRAINT constraint_name ] FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] } 表约束table_constraint为: 1 2 3 4 5 6 [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 索引参数index_parameters为: 1 2 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 列相关的操作column_clause子句 其中列相关的操作column_clause可以是以下子句之一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | MODIFY [ COLUMN ] column_name data_type | MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NULL | MODIFY [ COLUMN ] column_name DEFAULT default_expr | MODIFY [ COLUMN ] column_name ON UPDATE on_update_expr | MODIFY [ COLUMN ] column_name COMMENT comment_text | DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] | ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ] | ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT } | ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL | ALTER [ COLUMN ] column_name SET STATIS TICS [PERCENT] integer | ADD STATISTI CS (( column_1_name, column_2_name [, ...] )) | ADD { INDEX | UNIQUE [ INDEX ] } [ index_name ] ( { { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] } [, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] LOCAL [ ( { PARTITION index_partition_name } [, ...] ) ] [ WITH ( { storage_parameter = value } [, ...] ) ] | ADD { INDEX | UNIQUE [ INDEX ] } [ index_name ] ({ { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ WHERE predicate ] | DROP { INDEX | KEY } index_name | CHANGE [ COLUMN ] old_column_name new_column_name data_type [ [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | [ CONSTRAINT constraint_name ] NULL | DEFAULT default_expr | COMMENT 'text' ] | DELETE STATISTICS (( column_1_name, column_2_name [, ...] )) | ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] ) | ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] ) | ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
  • 表操作相关的action子句 具体表操作action可以是以下子句之一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 column_clause | ADD table_constraint [ NOT VALID ] | ADD table_constraint_using_index | VALIDATE CONSTRAINT constraint_name | DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] | CLUSTER ON index_name | SET WITHOUT CLUSTER | SET ( {storage_parameter = value} [, ... ] ) | RESET ( storage_parameter [, ... ] ) | OWNER TO new_owner | SET TABLESPACE new_tablespace | SET {COMPRESS|NOCOMPRESS} | DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { HASH ( column_name [,...] ) } } | TO { GROUP groupname | NODE ( nodename [, ... ] ) } | ADD NODE ( nodename [, ... ] ) | DELETE NODE ( nodename [, ... ] ) | DISABLE TRIGGER [ trigger_name | ALL | USER ] | ENABLE TRIGGER [ trigger_name | ALL | USER ] | ENABLE REPLICA TRIGGER trigger_name | ENABLE ALWAYS TRIGGER trigger_name | DISABLE ROW LEVEL SECURITY | ENABLE ROW LEVEL SECURITY | FORCE ROW LEVEL SECURITY | NO FORCE ROW LEVEL SECURITY | REFRESH STORAGE ADD table_constraint [ NOT VALID ] 给表增加一个新的约束。与NOT VALID选项组合时,这种约束仅在对外键和CHECK类约束有效。 如果约束条件增加了NOT VALID选项后,表中已有记录是否满足初始约束检查会被跳过。 ADD table_constraint_using_index 根据已有唯一索引为表增加主键约束或唯一约束。 VALIDATE CONSTRAINT constraint_name 验证一个外键或是一个使用NOT VALID选项创建的检查类约束,通过扫描全表来保证所有记录都符合约束条件。如果约束已标记为有效时,什么操作也不会发生。 DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] 删除一个表上的约束。 CLUSTER ON index_name 为将来的CLUSTER操作选择默认索引。实际上并没有重新盘簇化处理该表。 SET WITHOUT CLUSTER 从表中删除最新使用的CLUSTER索引。这样会影响将来那些没有声明索引的集群操作。 SET ( {storage_parameter = value} [, ... ] ) 修改表的一个或多个存储参数。 RESET ( storage_parameter [, ... ] ) 重置表的一个或多个存储参数。与SET一样,根据参数的不同可能需要重写表才能获得想要的效果。 OWNER TO new_owner 将表、序列、视图的属主改变成指定的用户。 SET {COMPRESS|NOCOMPRESS} 修改表的压缩特性。表压缩特性的改变只会影响后续批量插入的数据的存储方式,对已有数据的存储毫无影响。也就是说,表压缩特性的修改会导致该表中同时存在着已压缩和未压缩的数据。 DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { HASH ( column_name [,...] ) } } 修改表的分布方式,在修改表分布信息的同时会将表数据在物理上按新分布方式重新分布,修改完成后建议对被修改表执行ANALYZE,以便收集全新的统计信息。 本操作属于重大变更操作,涉及表分布信息的修改以及数据的物理重分布,修改过程中会阻塞业务,修改完成后原有业务的执行计划会发生变化,请按照正规变更流程进行。 本操作属于资源密集操作,针对大表的分布方式修改,建议在计算和存储资源充裕情况下进行,保证整个集群和原表所在表空间有足够的剩余空间能存储一张与原表同等大小且按照新分布方式进行分布的表。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } 此语法仅在扩展模式(GUC参数enable_cluster_resize为on时)下可用。该模式谨慎打开,主要供内部扩容工具使用,一般用户不应使用该模式。 ADD NODE ( nodename [, ... ] ) 此语法主要供内部扩容工具使用,一般用户不建议使用。 DELETE NODE ( nodename [, ... ] ) 此语法主要供内部缩容工具使用,一般用户不建议使用。 DISABLE TRIGGER [ trigger_name | ALL | USER ] 禁用trigger_name所表示的单个触发器,或禁用所有触发器,或仅禁用用户触发器(此选项不包括内部生成的约束触发器,例如,可延迟唯一性和排除约束的约束触发器)。 应谨慎使用此功能,因为如果不执行触发器,则无法保证原先期望的约束的完整性。 ENABLE TRIGGER [ trigger_name | ALL | USER ] 启用trigger_name所表示的单个触发器,或启用所有触发器,或仅启用用户触发器。 ENABLE REPLICA TRIGGER trigger_name 触发器触发机制受配置变量session_replication_role的影响,当复制角色为“origin”(默认值)或“local”时,将触发简单启用的触发器。 配置为ENABLE REPLICA的触发器仅在会话处于“replica”模式时触发。 ENABLE ALWAYS TRIGGER trigger_name 无论当前复制模式如何,配置为ENABLE ALWAYS的触发器都将触发。 DISABLE/ENABLE ROW LEVEL SECURITY 开启或关闭表的行访问控制开关。 当开启行访问控制开关时,如果未在该数据表定义相关行访问控制策略,数据表的行级访问将不受影响;如果关闭表的行访问控制开关,即使定义了行访问控制策略,数据表的行访问也不受影响。详细信息参见CREATE ROW LEVEL SECURITY POLICY章节。 NO FORCE/FORCE ROW LEVEL SECURITY 强制开启或关闭表的行访问控制开关。 默认情况,表所有者不受行访问控制特性影响,但当强制开启表的行访问控制开关时,表的所有者(不包含系统管理员用户)会受影响。系统管理员可以绕过所有的行访问控制策略,不受影响。 REFRESH STORAGE 根据OBS冷热表storage_policy所定义的规则,将符合条件的本地热分区切换为存储在OBS上的冷分区。 例如创建OBS冷热表时,设置storage_policy为 'LMT:10',则在执行该操作时可将10日前无修改的分区切为冷存储,存至OBS中。
  • ALTER TABLE语法格式 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } action [, ... ]; 修改表已存在字段的数据类型,可同时修改空约束,default值和注释信息,只允许相同大类的类型转换(数值之间,字符串之间,时间之间等)。 ALTER TABLE [ IF EXISTS ] table_name MODIFY ( { column_name data_type | [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | [ CONSTRAINT constraint_name ] NULL | DEFAULT default_expr | COMMENT 'text' } [, ...] ); 重命名表。对名称的修改不会影响所存储的数据;支持新表名前带有原表的schema名,不支持同时修改schema名。 1 2 3 4 ALTER TABLE [ IF EXISTS ] table_name RENAME TO new_table_name; ALTER TABLE [ IF EXISTS ] table_name RENAME TO schema.new_table_name; 重命名表中指定的列。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME [ COLUMN ] column_name TO new_column_name; 重命名表的约束。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME CONSTRAINT constraint_name TO new_constraint_name; 设置表的所属模式。 1 2 ALTER TABLE [ IF EXISTS ] table_name SET SCHEMA new_schema; 这种形式把表移动到另外一个模式。相关的索引、约束都跟着移动。目前序列不支持改变schema。 若该表拥有序列,需要将序列删除,重建,或者取消拥有关系, 才能将表schema更改成功。 要修改一个表的模式,用户必须在新模式上拥有CREATE权限。要把该表添加为一个父表的新子表,用户必须同时又是父表的所有者。要修改所有者,用户还必须是新的所有角色的直接或间接成员,并且该成员必须在此表的模式上有CREATE权限。这些限制规定了该用户不能做出了重建和删除表之外的事情。不过,系统管理员可以以任何方式修改任意表的所有权限。 除了RENAME和SET SCHEMA之外所有动作都可以捆绑在一个经过多次修改的列表中并行使用。比如,可以在一个命令里增加几个字段或修改几个字段的类型。对于大表,此种操作带来的效率提升更明显,原因在于只需要对该大表做一次处理。 增加一个CHECK或NOT NULL约束将会扫描该表,以保证现有的行符合约束要求。 用一个非空缺省值增加一个字段或者改变一个字段的现有类型会重写整个表。对于大表来说,这个操作可能会花很长时间,并且它还临时需要两倍的磁盘空间。 添加多个列。 1 2 ALTER TABLE [ IF EXISTS ] table_name ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]} [, ...] ); 更新多个列。 1 2 ALTER TABLE [ IF EXISTS ] table_name MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] ); 删除指定表上的索引。 1 ALTER TABLE table_name DROP INDEX index_name;
  • 注意事项 只有表的所有者或者被授予了表ALTER权限的用户有权限执行ALTER TABLE命令,系统管理员默认拥有此权限。但要修改表的所有者或者修改表的模式,当前用户必须是该表的所有者或者系统管理员,且该用户是新的所有角色的直接或间接成员。 不支持修改存储参数ORIENTATION。 SET SCHEMA操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。 列存表支持PARTIAL CLUSTER KEY,不支持外键表级约束。列存表自8.1.1集群版本开始建表时支持创建主键和唯一表级约束。 行存REPLICATION分布表不支持将系统列设置为主键。 列存表只支持添加字段ADD COLUMN、修改字段的数据类型ALTER TYPE、设置单个字段的收集目标SET STATISTICS、支持更改表名称、支持删除字段DROP COLUMN。对于添加的字段和修改的字段类型要求是列存支持的数据类型。ALTER TYPE的USING选项只支持常量表达式和涉及本字段的表达式,暂不支持涉及其他字段的表达式。 列存表支持的字段约束包括NULL、NOT NULL和DEFAULT常量值;对字段约束的修改,当前支持对DEFAULT值的修改(SET DEFAULT)、删除(DROP DEFAULT)和NOT NULL约束的删除; 支持通过ALTER方式对已有列存表添加非空约束NOT NULL以及主键约束。该约束仅8.2.0及以上集群版本支持。 修改列存表存储参数COLVERSION或者enable_delta时,不能与其他ALTER操作同时进行。
  • 示例 创建范围分区表customer_address。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 DROP TABLE IF EXISTS customer_address; CREATE TABLE customer_address ( ca_address_sk INTEGER NOT NULL , ca_address_id CHARACTER(16) NOT NULL , ca_street_number CHARACTER(10) , ca_street_name CHARACTER varying(60) , ca_street_type CHARACTER(15) , ca_suite_number CHARACTER(10) ) DISTRIBUTE BY HASH (ca_address_sk) PARTITION BY RANGE(ca_address_sk) ( PARTITION P1 VALUES LESS THAN(100), PARTITION P2 VALUES LESS THAN(200), PARTITION P3 VALUES LESS THAN(300) ); 创建示例list分区表。 DROP TABLE IF EXISTS data_list; CREATE TABLE data_list( id int, time int, sarlay decimal(12,2) )PARTITION BY LIST (time)( PARTITION P1 VALUES (202209), PARTITION P2 VALUES (202210,202208), PARTITION P3 VALUES (202211), PARTITION P4 VALUES (202212), PARTITION P5 VALUES (202301) ); modify_clause子句用于设置分区索引是否可用。 给分区表customer_address创建LOCAL索引student_grade_index,并指定分区的索引名称。 1 2 3 4 5 6 CREATE INDEX customer_address_index ON customer_address(ca_address_id) LOCAL ( PARTITION P1_index, PARTITION P2_index, PARTITION P3_index ); 重建分区表customer_address中分区P1上的所有索引。 1 ALTER TABLE customer_address MODIFY PARTITION P1 REBUILD UNUSABLE LOCAL INDEXES; 设置分区表customer_address的分区P3上的所有索引不可用。 1 ALTER TABLE customer_address MODIFY PARTITION P3 UNUSABLE LOCAL INDEXES; add_clause子句用于为指定的分区表添加一个或多个分区。 为范围分区表customer_address增加分区。 1 ALTER TABLE customer_address ADD PARTITION P5 VALUES LESS THAN (500); 为范围分区表customer_address增加分区: [500, 600), [600, 700)。 1 ALTER TABLE customer_address ADD PARTITION p6 START(500) END(700) EVERY(100); 为范围分区表customer_address增加MAXVALUE分区p7。 1 ALTER TABLE customer_address ADD PARTITION p7 END(MAXVALUE); 为列表分区表增加分区P6。 1 ALTER TABLE data_list ADD PARTITION P6 VALUES (202302,202303); split_clause子句用于将一个分区切割成多个分区。 将范围分区表customer_address的P7分区以800为分割点切分。 1 ALTER TABLE customer_address SPLIT PARTITION P7 AT(800) INTO (PARTITION P6a,PARTITION P6b); 将范围分区表customer_address中400所在的分区分割成多个分区。 1 ALTER TABLE customer_address SPLIT PARTITION FOR(400) INTO(PARTITION p_part START(300) END(500) EVERY(100)); 将列表分区表data_list的分区P2分割成p2a和p2b两个分区。 1 ALTER TABLE data_list SPLIT PARTITION P2 VALUES(202210) INTO (PARTITION p2a,PARTITION p2b); exchange_clause子句用于将普通表的数据迁移到指定分区。 如下示例将演示一个普通表math_grade数据迁移到分区表student_grade中分区(math)的操作。 创建分区表student_grade。 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE student_grade ( stu_name char(5), stu_no integer, grade integer, subject varchar(30) ) PARTITION BY LIST(subject) ( PARTITION gym VALUES('gymnastics'), PARTITION phys VALUES('physics'), PARTITION history VALUES('history'), PARTITION math VALUES('math') ); 插入数据到分区表student_grade中。 1 2 3 4 5 6 7 INSERT INTO student_grade VALUES ('Ann', 20220101, 75, 'gymnastics'), ('Jeck', 20220103, 60, 'math'), ('Anna', 20220108, 56, 'history'), ('Jann', 20220107, 82, 'physics'), ('Molly', 20220104, 91, 'physics'), ('Sam', 20220105, 72, 'math'); 查询分区表student_grade的math分区记录。 1 SELECT * FROM student_grade PARTITION (math); 查询结果如下: stu_name | stu_no | grade | subject ----------+----------+-------+--------- Jeck | 20220103 | 60 | math Sam | 20220105 | 72 | math (2 rows) 创建一个与分区表student_grade定义匹配的普通表math_grade。 1 2 3 4 5 6 7 CREATE TABLE math_grade ( stu_name char(5), stu_no integer, grade integer, subject varchar(30) ); 插入数据到表math_grade中。数据与分区表student_grade的math分区的分区规则一致。 1 2 3 4 5 INSERT INTO math_grade VALUES ('Ann', 20220101, 75, 'math'), ('Jeck', 20220103, 60, 'math'), ('Anna', 20220108, 56, 'math'), ('Jann', 20220107, 82, 'math'); 将普通表math_grade数据迁移到分区表student_grade的分区(math)。 1 ALTER TABLE student_grade EXCHANGE PARTITION (math) WITH TABLE math_grade; 查询分区表student_grade,结果显示表math_grade中的数据已和分区表student_grade的分区math中的数据交换。 1 SELECT * FROM student_grade PARTITION (math); 1 2 3 4 5 6 7 stu_name | stu_no | grade | subject ----------+----------+-------+--------- Anna | 20220108 | 56 | math Jeck | 20220103 | 60 | math Ann | 20220101 | 75 | math Jann | 20220107 | 82 | math (4 rows) 查询表math_grade,显示之前存储在分区表student_grade的分区math中的数据已交换到表math_grade中。 1 SELECT * FROM math_grade; 1 2 3 4 5 stu_name | stu_no | grade | subject ----------+----------+-------+--------- Jeck | 20220103 | 60 | math Sam | 20220105 | 72 | math (2 rows) truncate_partitioned_clause子语法用于清理表分区的数据。 清空表customer_address分区p1: 1 ALTER TABLE customer_address TRUNCATE PARTITION p1; row_clause子句用于设置分区表的行迁移开关。 打开分区表customer_address的迁移开关。 1 ALTER TABLE customer_address ENABLE ROW MOVEMENT; merge_clause子句用于把多个分区合并成一个分区。 将范围分区表customer_address的P2,P3两个分区合并为一个分区。 1 ALTER TABLE customer_address MERGE PARTITIONS P2, P3 INTO PARTITION P_M; drop_clause子句用于删除分区表中的指定分区。 删除分区表customer_address的多个分区P6a,P6b。 1 ALTER TABLE customer_address DROP PARTITION P6a, P6b;
  • 参数说明 表1 ALTER TABLE PARTITION参数说明 参数 描述 取值范围 table_name 需要修改的分区表的名称。 已存在的分区表名。 partition_name 需要修改的分区名。 已存在的分区名。 partition_value 分区键值。 通过PARTITION FOR ( partition_value [, ...] )子句指定的这一组值,可以唯一确定一个分区。 需要进行重命名分区的分区键的取值范围。 UNUSABLE LOCAL INDEXES 设置该分区上的所有索引不可用。 - REBUILD UNUSABLE LOCAL INDEXES 重建该分区上的所有索引。 - WITHOUT UNUSABLE 重建该分区上的索引时,忽略UNUSABLE状态的索引。 - ENABLE/DISABLE ROW MOVEMENT 行迁移开关。默认是关闭状态。 说明: ENABLE ROW MOVEMENT开启则允许跨分区更新,但此时如果有SELECT FOR UPDATE查询该分区表并发执行,存在查询结果瞬时不一致的可能性,需要谨慎使用。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 ENABLE:打开行迁移开关。 DISABLE:关闭行迁移开关。 ordinary_table_name 进行迁移的普通表的名称。 已存在的普通表名。 { WITH | WITHOUT } VALIDATION 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。默认为WITH。 由于检查比较耗时,特别是当数据量很大的情况下更甚。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 VERBOSE 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 须知: 只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 - partition_new_name 分区的新名称。 字符串,需符合标识符命名规范。
  • 语法格式 修改表分区主语法。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何, GaussDB (DWS)总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 1 2 3 4 5 6 7 8 9 10 modify_clause | rebuild_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | truncate_partitioned_clause modify_clause子语法用于设置分区索引是否可用。 1 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } rebuild_clause子语法用来重建分区的索引。该语法仅8.3.0.100及以上集群版本支持。 1 REBUILD PARTITION partition_name [ WITHOUT UNUSABLE ] exchange_clause子语法用于把普通表的数据迁移到指定的分区。 1 2 3 EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] 进行交换的普通表和分区表必须满足如下条件: 普通表和分区表的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息、已删除字段的数据类型等。 普通表和分区表的表压缩信息严格一致。 普通表和分区表的分布列信息严格一致。 普通表和分区表的索引个数相同,且对应索引的信息严格一致。 普通表和分区表的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表和unlogged表。 普通表和分区表应该在同一个逻辑集群或节点组(NodeGroup)中,如果不在同一个逻辑集群或节点组,将会采用将数据插入对方表内方式来实现交换分区,这样交换分区的时间与表数据量有关,对于数据量非常大的表和分区表,交换分区将会非常耗时。 在线扩容重分布场景中,如果普通表和分区表正在重分布,交换分区语句有可能中断正在重分布的普通表或分区表(取决于交换分区和重分布语句是否产生锁冲突),通常重分布的普通表或分区表被中断后会重试2次,但同一个表交换分区执行过于频繁可能导致普通表或分区表多次重试重分布都失败。如果普通表重分布过程被交换分区操作打断,在重试重分布时,数据已经被替换为原分区表中的数据,会重新进行全量重分布。 如果行存分区表中最后一个有效字段后的其他字段全部被删除,在不考虑这些删除字段的情况下,分区表与普通表字段信息一致时,分区表和普通表可以进行交换。 列存普通表和列存分区表的表级参数colversion必须一致:禁止colversion2.0与colversion1.0执行交换分区操作。 完成交换后,普通表和分区表的数据被置换,同时普通表和分区表的表空间信息被置换。此时,普通表和分区表的统计信息变得不可靠,需要对普通表和分区表重新执行analyze。 row_clause子语法用于设置分区表的行迁移开关。 1 { ENABLE | DISABLE } ROW MOVEMENT merge_clause子语法用于把多个分区合并成一个分区。 1 MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name INTO关键字前的分区称为源分区,INTO关键字后的分区称为目标分区。 源分区个数不能小于2个。 源分区名称不能重复。 源分区不能存在unusable的索引,否则执行会报错。 目标分区名只能跟最后一个源分区的名称相同,或者跟表的所有分区名都不相同。 目标分区的边界是所有源分区边界的并集。 对于范围分区表,所有的源分区必须是边界连续的分区。 对于列表分区,如果源分区中包含DEFAULT分区,那么目标分区的边界也是DEFAULT。 modify_clause子语法用于设置分区索引是否可用。 1 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } split_clause子语法用于把一个分区切割成多个分区。 范围分区的split_clause语法如下: 1 SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_point_clause | no_split_point_clause } 指定切割点split_point_clause的语法为: 1 AT ( partition_value ) INTO ( PARTITION partition_name , PARTITION partition_name ) 切割点的大小要位于正在被切割分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 不指定切割点no_split_point_clause的语法为。 1 INTO { ( partition_less_than_item [, ...] ) | ( partition_start_end_item [, ...] ) } 不指定切割点的方式,partition_less_than_item指定的第一个新分区的分区键要大于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition_less_than_item指定的最后一个分区的分区键要等于正在被切割分区的分区键大小。 不指定切割点的方式,partition_start_end_item指定的第一个新分区的起始点(如果存在的话)必须等于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition_start_end_item指定的最后一个分区的终止点(如果存在的话)必须等于正在被切割分区的分区键。 partition_less_than_item支持的分区键个数最多为4,而partition_start_end_item仅支持1个分区键,其支持的数据类型参见表1中的“PARTITION BY RANGE(partition_key)”参数。 在同一语句中partition_less_than_item和partition_start_end_item两者不可同时使用;不同split语句之间没有限制。 分区项partition_less_than_item的语法为: 1 2 PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } [, ...] ) 分区项partition_start_end_item的语法为,其约束参见表1中的“partition_start_end_item”参数。 1 2 3 4 5 6 PARTITION partition_name { {START(partition_value) END (partition_value) EVERY (interval_value)} | {START(partition_value) END ({partition_value | MAXVALUE})} | {START(partition_value)} | {END({partition_value | MAXVALUE})} } 列表分区的split_clause语法如下: 1 SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_values_clause | split_no_values_clause } 指定切割点的split_values_clause的语法为: 1 VALUES ( { (partition_value) [, ...] } | DEFAULT } ) INTO ( PARTITION partition_name , PARTITION partition_name ) 如果源分区不是DEFAULT分区,那么切割点所指定的边界是源分区边界的一个非空真子集;如果源分区是DEFAULT分区,那么切割点所指定的边界不能和其它非DEFAULT分区的边界存在重叠。 切割点的指定的边界是INTO关键字后面的第一个分区的边界,源分区边界与切割点的指定的边界的差集是第二个分区的边界。 当源分区是DEFAULT分区时,第二个分区的边界还是DEFAULT。 不指定切割点的split_no_values_clause的语法为: 1 INTO ( list_partition_item [, ....], PARTITION partition_name ) 此处的list_partition_item和创建列表分区表的时候指定分区的语法一样,除了此处的分区定义中边界值不能为DEFAULT。 除了最后一个分区,其他分区需要显式定义边界,定义的边界不能是DEFAULT,并且必须是源分区边界的非空真子集。最后一个分区的边界是源分区边界与其它分区边界的差集,且最后一个分区的边界为空(即差集不能为空集)。 如果源分区是DEFAULT分区,则最后一个分区的边界为DEFAULT。 add_clause子语法用于为指定的分区表添加一个或多个分区。 范围分区的add_clause语法如下: 1 ADD { partition_less_than_item... | partition_start_end_item } 使用partition_less_than_item语法时,分区表必须是范围分区表,否则执行会报错。 此处partition_less_than_item和创建范围分区表的时候指定分区的语法一样。 当前分区表的最后一个分区的边界为MAXVALUE,不允许添加新的分区,否则执行会报错。 列表分区的add_clause语法如下: 1 ADD list_partition_item 使用list_partition_item语法时,分区表必须是列表分区表,否则执行会报错 此处的list_partition_item和创建列表分区表的时候指定分区的语法一样 当前分区表存在DEFAULT分区时,不允许添加新的分区动作,否则执行会报错 drop_clause子语法用于删除分区表中的指定分区。 1 DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } drop_clause子语法支持删除多个分区语法。(8.1.3.100及以上集群版本支持。) 1 DROP PARTITION { partition_name [, ... ] } truncate_partitioned_clause子语法用于清理表分区的数据。 1 TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) }; partition_value为分区键值。支持指定多个分区键值,多个分区键值以英文逗号分隔。 使用PARTITION FOR子句时,partition_value所在的整个分区会被清空。 修改表分区名称的语法。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME PARTITION { partition_name | FOR ( partition_value [, ...] ) } TO partition_new_name;
  • 注意事项 添加分区的名称不能与该分区表已有分区的名称相同。 对于范围分区表,要添加的分区的边界值要和分区表的分区键的类型一致,且要大于分区表的最后一个分区的上边界。 对于列表分区表,如果已经定义DEFAULT分区,则不能添加新分区。 若文档中未特殊注明,则表明范围分区表和列存分区的语法使用相同。 如果目标分区表中已有分区数达到了最大值(32767),则不能继续添加分区。 当分区表只有一个分区时,不能删除该分区。 删除分区(DROP PARTITION)时会连同分区内数据一起删除。 选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。 Value分区表不支持相应的Alter Partition操作。 OBS冷热表对于move,exchange,merge,split操作,不支持指定分区表的表空间为OBS表空间;执行ALTER语法时,需保持分区数据冷热属性不变(即冷分区操作后为冷分区,热分区操作后为热分区),不支持将冷分区数据切至本地表空间;对于冷分区仅支持默认表空间;merge操作不支持将冷分区与热分区进行合并,exchange操作不支持冷分区交换。 避免在业务高峰期执行ALTER TABLE/ALTER TABLE PARTITION(增删改查、DROP PARTITION)、TRUNCATE操作,避免有长SQL阻塞ALTER、TRUNCATE操作或SQL业务被ALTER、TRUNCATE阻塞。 更多开发设计规范参见总体开发设计规范。
  • 8.3.0.101 表5 8.3.0.101新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 vacuum full适配binlog表。 - - - 解决问题 analyze语句报错Could not open file "pg_clog/000000000075" 列存表进行vacuumfull后可能提前回收clog,导致主备切换后进行analyze时无法访问clog文件。 8.3.0.100 升级到8.3.0.101及以上版本 使用\parallel on高并发下创建job报错duplicate key value violates unique constraint "pg_jobs_id_index" ,Key(job_id)=() already exists。 获取job_id处的锁未成功加上,导致并发时取到相同job_id报错。 8.3.0.100 多个nodegroup场景下,重分布不支持跳过指定表,导致缩容失败。 重分布不支持跳过指定表。 8.3.0.100 执行Hstore用例,网卡故障时,因为内存为超大负数,导致用例执行失败。 临时变量声明后,未赋值导致参数值非预期,后续再去扣减内存,内存出现超大负数。 8.3.0.100
  • 8.3.0.105 表3 8.3.0.105新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 无 - - - 解决问题 多count distinct走share scan出现结果集错误 sharescan计划生成时,CTE子查询误用了上层的等价类信息,造成分布列判断错误,生成计划缺少数据重分布算子 8.3.0.105以前版本 升级到8.3.0.105及以上版本 升级到830版本后系统表autovacuum未生效 升级830前做过容灾迁移,容灾迁移会先设置autovacuum_max_workers为0,再修改成原来的默认值3,导致升级后未将该值设为预期的值6 8.3.0.105以前版本 修复UDF在recv接收数据时,可能存在超时后error为EAGAIN但没有被捕获直接报错的问题 当cn_retry开启时,socket recv 20s超时后,EAGAIN的错误码没有被捕获,直接走到报错逻辑 8.3.0.105以前版本
  • 8.3.0.110 表1 8.3.0.110新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 新安装集群默认打开全局死锁检测功能,之前版本默认没有打开。 - - - 解决问题 当一个常用表达式(Common Table Expressions,简称CTE)仅被另一个CTE引用多次时可能触发空指针访问导致故障。 当一个CTE仅被另一个CTE引用多次时,计划递归遍历逻辑错误导致访问空指针,产生集群故障。 8.3.0.101 升级到8.3.0.110及以上版本 列存表查询语句中出现多结果集函数时,执行该语句会报错Set-returning function is not supported in vector engine。 非表的scan算子上的向量化执行引擎不支持多结果集函数。 8.3.0.101 集群低版本升级到8.3.0版本时,线程池功能失效。 集群低版本升级到8.3.0时,需要根据当前硬件配置设置max_stream_pool,因为默认单位识别异常,导致max_stream_pool被设置为0。 8.3.0.101 使用parquet外表查询报错The parameter destMax is too small or parameter count is larger than macro parameter。 parquet外表的string类型字段的缓冲区空间管理错位,导致大于1K的字段内存分配不够,引起业务报错。 8.3.0.101 正在数据重分布的冷热表进行分区交换操作时报错Multi-temperature table only support column partition table。 重分布过程中创建的临时表引用了原表的冷热表属性,导致临时表创建失败。 8.3.0.101
  • 行为变更 表7 行为变更 变更类型 序号 名称 变更描述 新增 1 分区视图依赖变化 8.2.1以前版本,没有对select partition()或者partition for()语句的视图建立视图依赖,造成查询报错。 8.2.1版本后新增分区oid依赖,对于drop分区或者修改分区范围值在视图解耦场景下引发视图重建,非视图依赖场景下会报错。 修改 2 增加GTM上gtm_max_trans参数取值上限。 先将线程最大限制调大,可以给现网一个逃生通道,解决某些局点集群规模大,业务并发高,可能存在达到线程上限进而无法连接的问题。 3 max_process_memory CN调整为DN的一半。 4 Catchup流程 去掉了数据页Catchup的事务锁,Catchup不再和DDL之间有互等关系;增加了LwLock,通过事务提交的LwLock进行Catchup以及DDL业务之间的串行操作,避免Catchup访问到空文件。 5 备DN checkpoint时机 备DN的checkpoint不再等待15min按周期运行,而且redo到checkpoint点后,会强制执行一次checkpoint,避免大数据xlog导入场景下,备DN的Rto过长。 6 备DN文件关闭时机 备DN执行heap_xlog_newpage以及seq_redo时,首页面写入数据后,会强制关闭。 7 indexscan hint可包含indexonlyscan indexscan hint可包含indexscan和indexonlyscan;与indexonlyscan hint同时存在时,indexonlyscan优先生效。 8 大小写表达式不支持roughcheck 大小写表达式不再支持roughcheck,因cu的minmax基于C排序计算,下推会有结果集问题。 9 多count(distinct)重写时,使用CTE进行重写 重写行为发生变化,非share scan场景不影响后续展开过程,share scan场景生成stream CTE的计划。 10 TopSQL子语句监控 TopSQL子语句监控规格从递归打开,变更为仅记录第一层子语句。 11 ArrayLockFreeQueue 无锁队列初始化分配内存不会超过1GB。 12 Explain Explain结果集新增显示unique sql id。 13 Explain Explain+查询语句的unique sql id与查询语句相同。 14 GS/PGXC_WLM_SESSION_STATISTICS视图 GS/PGXC_WLM_SESSION_STATISTICS视图新增unique sql id字段。 15 GROUP BY后不需体现所有非聚合函数查询字段 8.1.3版本处理时会将非聚合函数查询字段补为min(xx)的形式,8.2.0及以上版本修改为取该列随机值。 8.2.0版本对于多列非聚合函数查询字段取值时取该列非NULL值,会出现结果集不同行场景,8.2.1版本修改为结果集为相同行。 16 alter function owner to superuser 禁止了sysadmin用户修改函数/存储过程的owner到系统用户的场景。保留系统用户change到系统用户的场景。 17 (+)连接顺序变化,会导致带有nvl等表达式的结果集产生变化 (+)连接顺序与Oracle看齐,原(+)连接顺序与join关联顺序相关,改写后带有nvl等相关表达式的关联条件顺序及结果集会有变化。 18 hstore表并发更新同一行会直接报错,不再等待后报错 hstore表并发更新同一行会直接报错,不再等待。 之前的行为是:(1)并发update同一行等待后报错;(2)并发delete同一行等待后成功;(3)并发delete和update同一行等待后报错。修改为统一的行为。 19 Catchup不再拿一级锁 Catchup不再拿一级锁。 20 连续的failover逻辑中,只有首次会进行从DN到备DN的数据同步 连续的failover逻辑中,只有首次会进行从DN到备DN的数据同步。 21 不同session同名临时表执行相同SQL语句时unique sql id一致 8.2.1以前版本不同session同名临时表schema name不同,直接使用后生成的unique sql id就也不同。8.2.1版本修改后不同session同名临时表根据schema name替换固定字符串,保证执行相同SQL语句时unique sql id一致。 22 细粒度容灾支持主集群degraded状态下备份 细粒度容灾在支持主集群degraded状态下备份,例外场景主集群主节点无正常CN导致的degraded不支持。 23 视图解耦 当访问到无效视图时,不触发自动重建动作,即不更新系统表,而是在本地展开
  • 系统视图 表6 系统视图 变更类型 序号 名称 变更描述 新增 1 SHOW_TSC_INFO 用于查看当前节点TSC换算信息。 2 SHOW_ALL_TSC_INFO 用于查看所有节点TSC换算信息。 3 GET_TSC_INFO 用于重新获取一次当前节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 4 GET_ALL_TSC_INFO 用于重新获取一次所有节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 5 PGXC_WLM_TABLE_DISTRIBUTION_SKEWNESS 用于展示实体表在DN所占磁盘空间倾斜率。 6 PGXC_STAT_OBJECT 查询全集群所有节点的pg_stat_object信息。 7 PG_GLOBAL_TEMP_ATTACHED_PIDS 查看全局临时表在当前节点占有资源的会话信息。 8 PGXC_GLOBAL_TEMP_ATTACHED_PIDS 查看全局临时表在所有节点占有资源的会话信息。 9 PG_STATS_EXT_EXPRS 用于查询保存在系统表pg_statistic_data中的表达式统计信息数据。 10 PV_RUNTIME_EXPRSTATS 基于pg_stat_get_runtime_exprstats函数建立,用于查询动态采样生成的表达式统计信息。 11 PG_PLAN_BASELINE 新增系统视图,保存sql和plan之间的绑定关系。 12 PG_STAT_OBJECT_EXT 新增系统视图,通过在pgxc_parallel_query内层为视图添加查询条件,从而加速返回pgxc_stat_object相应查询条件返回的结果。 修改 13 GS_WLM_SESSION_STATISTICS 新增列stmt_type标识语句类型。 14 PGXC_WLM_SESSION_STATISTICS 新增列stmt_type标识语句类型。 15 GS_WLM_SESSION_HISTORY 新增列stmt_type标识语句类型。 16 GS_WLM_SESSION_INFO 新增列stmt_type标识语句类型。 17 PGXC_WLM_SESSION_HISTORY 新增列stmt_type标识语句类型。 18 PGXC_WLM_SESSION_INFO 新增列stmt_type标识语句类型。 19 GS_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 20 PGXC_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 21 PG_TOTAL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 22 PGXC_TOTAL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 23 PGXC_RESPOOL_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 24 PGXC_WLM_USER_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 25 GS_WLM_SESSION_STATISTICS/PGXC_WLM_SESSION_STATISTICS 新增except_info显示语句触发的异常规则信息。 26 GS_WLM_SESSION_INFO/PGXC_WLM_SESSION_INFO 新增except_info显示语句触发的异常规则信息。 27 GS_WLM_SESSION_HISTORY/PGXC_WLM_SESSION_HISTORY 新增except_info显示语句触发的异常规则信息。 28 REDACTION_COLUMNS redaction_columns修改视图定义,新增字段policy_name。 29 PG_STATS PG_STATS视图中增加partname来表示分区。 30 PV_RUNTIME_A TTS TATS pg_catalog.pv_runtime_attstats视图中增加partname来表示分区。 31 GS_WLM_OPERATOR_STATISTICS 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 32 PGXC_WLM_OPERATOR_STATISTICS 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 33 PGXC_STAT_OBJECT 跟随pg_stat_object一起更改,预留字段extra1改名为last_autovacuum_csn。
  • 系统函数 表5 系统函数 变更类型 序号 名称 变更描述 新增 1 SHOW_TSC_INFO() 用于查看当前节点TSC换算信息。 2 GET_TSC_INFO() 用于重新获取一次当前节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 3 TEST_TSC_INFO(time double, loops int) 用于测试TSC换算时间的准确性,其中时间不得大于60s,循环次数范围值[1,10]。 4 GET_FIRST_VALUE 返回当前列第一行值。 5 READ_GLOBAL_VAR 用于读取例如my.var的全局session级变量。 6 GS_QUERY_PENALTY(query_id) 新增手动降级函数,入参为query_id。 7 CURRENT_TEMP_SCHEMA 显示当前会话的临时schema。 8 GS_WAIT_CURRENT_ACTIVE_DDL_COMPLETE 等待所有线程的guc参数生效。 9 PGXC_WAIT_CURRENT_ACTIVE_DDL_COMPLETE 等待所有线程的guc参数生效。 10 GS_SWITCH_PART_RELFILENODE 用于交换两个指定分区的filenode。 11 REFRESH_HOT_STORAGE(text) 用于将指定冷热表的所有分区数据全部刷到OBS上。返回的数值为执行完该函数后,当前多温表中在DN上冷分区的个数。 12 REFRESH_HOT_STORAGE(text,text) 用于将指定冷热表的分区数据刷到OBS上。返回的数值为执行完该函数后,当前该分区在DN上冷分区的个数。 13 PG_QUERY_AUDIT_DETAILS 通过调用pgxc_query_audit或pg_query_audit来解析object_details、object_name字段。 14 PGXC_HSTORE_DELTA_INFO 提供系统函数pgxc_hstore_delta_info('relname'), 从CN上查询HStore表的Delta表上各种类型记录的数量、表的大小等信息,用于辅助定位问题。 15 COPY_PARTITION_STATS 将一个表的分区统计信息复制给另外一个不存在统计信息的分区。 16 UPDATE_PARTITION_RELSTATS 更新分区表的统计信息relpages和reltuples。 17 PG_GET_STAT_EXPRESSIONS 用于获取创建的表达式统计信息中表达式的文本表示形式。 18 GS_HSTORE_COMPACTION 手动触发hstore表的compaction,不受autovacuum_compaction_rows_limit控制,第一个参数传入表名,第二个参数设置小CU行数的阈值,第二个参数不设置则默认100。 19 PG_SCAN_RESIDUALFILES 新增残留文件扫描系统函数。 20 PG_GET_SCAN_RESIDUALFILES 新增获取已扫描的残留文件列表系统函数。 21 PGXC_LOCK_WAIT_STATUS() 集群锁等待关系查询。 22 PG_CANCEL_BACKEND(pid, msg) 中断pid会话时支持传入指定消息作为报错信息提示。 23 PG_GET_STATISTICSOBJDEF 新增pg_get_statisticsobjdef函数来获取表达式统计信息的创建语句。 24 PG_STAT_GET_ALL 输入namespace.relname,返回当前CN哈希表中pg_stat_object中该表对应的tuple。 25 PGXC_STAT_GET_ALL 输入namespace和relname,返回所有CN上哈希表中pg_stat_object中该表对应的tuple。 26 PGXC_STAT_OBJECT_BYNAME 新增系统函数,通过输入namespace.relname,加速返回pgxc_stat_object相应relname限定的记录。 27 PG_DUMP_PLANMGMT_INFO 实时刷入待保存计划,便于下一步处理bind、unbind、drop等操作。 28 PG_FOREIGN_INSERT_COMMIT 用于对extrenal schema表对象执行insert时CN给DN下发rename计划。 29 PG_SYSTEM_WITH_TOAST_CREATE 为pg_external_namespace系统表创建toast表。 30 PG_GET_EXTERNAL_SCHEMA_TABLE_OPTIONS 获取external schema表对象的option。 31 PG_GET_EXTERNAL_SCHEMA_TABLE_COL 获取external schema表对象的列元数据。 修改 32 GS_WLM_REBUILD_SCHEMA_HASH(oid) 修改入参从int改为OID。 33 GS_WLM_ALL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 34 GS_GET_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 35 GS_WLM_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed),新增入参username。 36 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增except_info显示语句触发的异常规则信息。 37 GS_TABLE_DISTRIBUTION 增加字段relpersistence: t:本地临时表 g:全局临时表 u:unlogged表 p:普通表 增加字段sessionid全局临时表的会话线程id。 38 PG_FAST_TABLE_SIZE 增加字段relpersistence: t:本地临时表 g:全局临时表 u:unlogged表 p:普通表 增加字段sessionid全局临时表的会话线程id。 39 PG_LIFECYCLE_TABLE_DATA_DISTRIBUTE 修改函数使得非管理员用户可以使用。 40 PG_QUERY_AUDIT 审计日志中新增object_details、result_rows、error_code列,修改pg_query_audit输出参数,新增输出三列。 41 PGXC_QUERY_AUDIT 审计日志中新增object_details、result_rows、error_code列,修改pgxc_query_audit输出参数,新增输出三列。 42 GET_COL_CU_INFO 新增参数dirty_percent,取值范围1-100,默认值70。 新增返回列dirty_cu_count,返回删除率大于dirty_percent的CU数量。 43 PG_STAT_GET_WLM_REALTIME_OPERATOR_INFO 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 44 PG_STAT_GET_WLM_REALTIME_OPERATOR_INFO 新增入参queryid,查询指定queryid的语句信息。 45 TRUNC(timestamp with time zone)函数修改稳定性类型 该函数之前定义的为immutable,但是根据实际函数的应用场景应该是stable的,修改前在某些条件下会性能差。 46 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增列stmt_type字段标识语句类型。 47 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增unique_sql_id字段。
  • 系统表 表4 系统表 变更类型 序号 名称 变更描述 新增 1 PG_STAT_OBJECT autovacuum线程记录统计信息和autovacuum效果信息到系统表pg_stat_object中。 2 PG_PLAN_BASELINE 保存sql和plan之间的绑定关系。 3 PG_PROC_REDACT 新增系统表,记录手动不脱敏函数。 修改 4 GS_WLM_SESSION_INFO 新增字段stmt_type标识语句查询类型。 5 GS_RESPOOL_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 6 GS_WLM_USER_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 7 PG_REDACTION_POLICY 新增policy_order字段,记录同一个表对象关联的脱敏策略的优先级次序,序号越大表示越后创建,优先级更高。 8 PG_REDACTION_COLUMN 新增policy_oid字段,记录当前脱敏列信息对应的是哪个脱敏策略。8.2.1版本后,脱敏策略的脱敏列是一对多的关系,脱敏策略的表对象是多对一关系。 9 PG_STAT_OBJECT 将预留字段extra1改名为last_autovacuum_csn。 10 GS_WLM_SESSION_INFO 增加unique_plan_id、sql_hash、plan_hash、use_plan_baseline字段。
  • ICAgent安装说明 如果需要采集主机指标、容器指标、节点日志、容器日志、标准输出日志等,则需要在采集日志的机器上安装ICAgent。 请参考安装ICAgent(区域内主机)和安装ICAgent(区域外主机)。 区域内主机就是主机所在区域和用户登录 云日志 服务控制台所在的区域相同,例如华北-北京四。 区域外主机就是主机所在区域和用户登录云日志服务控制台所在区域不同,例如华为云其他区域、第三方都属于区域外主机。
  • ICAgent采集原理 主机安装ICAgent后,会对所关联的日志文件进行实时监听。ICAgent侧收到LTS接入页面下发的采集配置后,会定时解析采集配置信息,获取到采集路径后在节点上进行路径匹配,将节点上对应的文件加入监控任务中,通过轮询和inotify感知目标日志文件的变化。 ICAgent侧发现文件变更后,读取文件的内容,分块发送到处理模块,进行单行、多行、结构化、拆分、添加标签等日志处理动作,再将处理好的任务提交到发送任务池后,上报到LTS。
  • 功能优势 直接采集现有的日志文件,无需修改应用程序代码,不会影响应用程序运行。 稳定处理日志采集过程中的各种异常。当遇到网络异常、服务端异常等问题时会采用主动重试、本地缓存数据等措施保障数据安全。 基于日志服务的集中管理能力。安装ICAgent后,只需要在日志服务上配置主机组、ICAgent采集配置等信息即可。 完善的自我保护机制。为保证运行在服务器上的ICAgent,不会明显影响您服务器上其他服务的性能,ICAgent在CPU、内存及网络使用方面都做了严格的限制和保护机制。
  • 约束与限制 LTS会自动检测主机安装的ICAgent插件版本。 如果检测到您的主机中后期不维护的ICAgent插件版本时,当您进入LTS控制台后,界面会弹出“ICAgent版本太低”的提示框,您可以根据实际需求单击“授权自动升级”授权LTS为您在业务低峰期自动升级ICAgent插件,或单击“前往手动升级”前往主机管理页面升级ICAgent。如果您暂不需要升级ICAgent插件,可勾选“不再提示”前的复选框,取消提示信息。
  • 创建快速分析 快速分析以日志流为单位,请参考如下步骤创建快速分析。 登录云日志服务控制台,进入“日志管理”页面。 单击目标日志组或日志流名称,进入日志详情页面。 在“日志搜索”页签,单击快速分析后面的进入“索引配置”页面,在字段索引下方,添加字段时开启快速分析。 图1 快速分析 单击“确定”,快速分析创建完成。 字段前面显示abc表示String类型字段。 字段前面显示1.2表示float类型字段。 字段前面显示123表示long类型字段。 快速分析的字段长度最大为2000字节。 快速分析字段展示前100条数据。 支持显示当前字段的采样数量。 单击即可查看一键生成的图表展示,string类型的字段支持展示字段分布值统计和智能聚合时间折线图,long和float数值类型的字段只支持展示智能聚合时间折线图。单击图表即可进入详情页面。 图2 string类型字段展示图表 单击字段分布值统计或智能聚合时间折线图,会自动跳转到“ 日志分析 ”页面并生成对应的SQL查询语句进行查询,更加直观地展示字段值的分布和变化趋势。更多信息请参见分析LTS日志。 设置隐藏或显示字段。 该功能仅支持华北-乌兰察布一、华东-上海一、中国-香港、亚太-新加坡区域,其他局点暂不支持该功能。 在显示字段下方的目标字段后面单击即可隐藏单个字段。 在显示字段旁边,单击即可一键隐藏全部字段。 在隐藏字段下方的目标字段后面单击即可显示单个字段。 在隐藏字段旁边,单击即可一键显示全部字段。
  • 检查代码 选中示例代码,单击右键,选择菜单“CodeArts 盘古助手:Add to Chat”或使用快捷键“Ctrl+Shift+Q”将代码添加至研发对话窗口。 在研发对话窗口中输入代码检查需求“检查这段代码是否存在缺陷”,单击发送。 CodeArts 盘古助手将描述代码中存在的代码逻辑、常见缺陷问题。 图1 CodeArts 盘古助手响应代码检查问题 单击可以对修改后的代码和原始代码进行差异比较。 图2 CodeArts 盘古助手代码差异比较视图
  • 登录Huawei Cloud Toolkit Platform JetBrains系列IDE中登录Huawei Cloud Toolkit Platform请参考:IntelliJ IDEA平台登录Huawei Cloud Toolkit Platform。 VSCode IDE中登录Huawei Cloud Toolkit Platform请参考:VSCode IDE平台登录Huawei Cloud Toolkit Platform。 CodeArts IDE登录Huawei Cloud Toolkit Platform同VSCode IDE登录过程。
  • 通过问答生成代码 在研发对话窗口输入框中输入生成代码需求,如:“Java冒泡排序”,单击研发对话窗口输入框右下角按钮发送。 CodeArts 盘古助手将在研发对话窗口中生成Java冒泡排序代码。 图3 CodeArts 盘古助手响应代码 单击输入框右上角可以将对话内容归档并新建会话,单击研发对话窗口右上角可以查看历史提问。 对CodeArts 盘古助手生成的代码块,可以进行如下操作: 单击复制代码。 单击在当前光标位置插入代码。 单击将代码另存为文件。 对CodeArts 盘古助手回答的内容,可以进行如下操作: 图4 回答可操作项 单击可以针对提问重新生成结果。 单击可以复制回答内容。 单击对回答满意。 单击对回答不满意。 单击打开默认浏览器进入华为云智能客服页面。 单击对回答进行举报或投诉。 单击跳转至回答起始位置。
  • 翻译代码 选中一段C或Flex代码,使用快捷键单击右键,选择菜单“CodeArts 盘古助手:Add to Chat”或使用快捷键“Ctrl+Shift+Q”将代码添加至研发对话窗口。 在研发对话窗口输入框中输入“/”,在弹出菜单中选择“/translate”或单击研发对话窗口中“Code Translate”,CodeArts 盘古助手会自动根据选择代码片段判断源语言及目标语言,单击发送。 CodeArts 盘古助手会将代码翻译为目标语言代码,并对翻译后的代码进行解释。
  • 看板成员管理 CodeArts 盘古助手支持企业租户通过看板页面导入成员,被导入的成员会被自动赋予使用CodeArts 盘古助手插件的权限。具体导入过程如下: 在CodeArts 盘古助手统计看板页面右上角单击“成员管理”选项进入成员管理页面。 在成员管理页面左上角单击“从本企业导入成员”,选择要导入的成员。若所需添加的成员未在添加人员列表下,可参考创建 IAM 用户进行用户创建,然后再进行成员导入。 单击“确定”,完成企业成员的添加。 图2 CodeArts 盘古助手成员管理页面
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全