华为云用户手册

  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name POSITION(offset,length) | LIKE source_table } [, ...] ] ) SERVER gsmpp_server OPTIONS ( { option_name ' value ' } [, ...] ) [ { WRITE ONLY | READ ONLY }] [ WITH error_table_name | LOG INTO error_table_name] [REMOTE LOG 'name'] [PER NODE REJECT LIMIT 'value'] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];
  • 表操作示例 重命名表: 1 ALTER TABLE CUSTOMER RENAME TO CUSTOMER_t; 给表增加一个新的约束: 1 ALTER TABLE customer_address ADD PRIMARY KEY(ca_address_sk); 根据已有唯一索引为表增加主键约束或唯一约束。 先给表CUSTOMER创建唯一索引CUSTOMER_constraint1,然后根据已有唯一索引增加主键约束,并对前面创建的索引rename: 1 2 CREATE UNIQUE INDEX CUSTOMER_constraint1 ON CUSTOMER(C_CUSTKEY); ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_constraint2 PRIMARY KEY USING INDEX CUSTOMER_constraint1; 重命名表约束: 1 ALTER TABLE CUSTOMER RENAME CONSTRAINT CUSTOMER_constraint2 TO CUSTOMER_constraint; 删除表约束: 1 ALTER TABLE CUSTOMER DROP CONSTRAINT CUSTOMER_constraint; 给表增加一个索引: 1 ALTER TABLE CUSTOMER ADD INDEX CUSTOMER_index(C_CUSTKEY); 删除表索引: 1 2 ALTER TABLE CUSTOMER DROP INDEX CUSTOMER_index; ALTER TABLE CUSTOMER DROP KEY CUSTOMER_index; 向在一个列存表中添加局部聚簇列: 1 ALTER TABLE customer_address ADD CONSTRAINT customer_address_cluster PARTIAL CLUSTER KEY(ca_address_sk); 删除一个列存表中的局部聚簇列: 1 ALTER TABLE customer_address DROP CONSTRAINT customer_address_cluster; 切换列存表的存储格式: 1 ALTER TABLE customer_address SET (COLVERSION = 1.0); 修改表的分布方式: 1 ALTER TABLE customer_address DISTRIBUTE BY REPLICATION; 修改表模式: 1 ALTER TABLE customer_address SET SCHEMA tpcds; 单表冷热切换: 1 ALTER TABLE cold_hot_table REFRESH STORAGE; 列存分区表修改为冷热表: 1 2 3 4 5 6 7 CREATE table test_1(id int,d_time date) WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH (id) PARTITION BY RANGE (d_time) (PARTITION p1 START('2022-01-01') END('2022-01-31') EVERY(interval '1 day')) ALTER TABLE test_1 SET (storage_policy = 'LMT:100');
  • 参数说明 IF EXISTS 如果不存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表不存在。 table_name [*] | ONLY table_name | ONLY ( table_name ) table_name是需要修改的表名。 若声明了ONLY选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都将会被更改。另外,可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为。 constraint_name 约束的名字。约束名长度不超过63个字符。 index_name 索引名称。 storage_parameter 表的存储参数的名字。 分区管理新增的两个选项: PERIOD(interval类型) 设置分区管理中自动创建分区的周期。 PERIOD的范围要求以及开启该功能的约束请参考▪PERIOD。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动创建分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动创建分区功能,但是在自动删除分区功能存在的情况下,不支持关闭自动创建分区功能。 TTL(interval类型) 设置分区管理中自动删除分区的分区过期时间。 TTL的范围要求以及开启该功能的约束请参考▪TTL。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动删除分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动删除分区功能。 new_owner 表所属新的拥有者的名字。 new_tablespace 表所属新的表空间名字。 column_name,column_1_name, column_2_name 现存的或新字段的名称。 data_type 新字段的类型,或者现存字段的新类型。 compress_mode 表字段的压缩可选项,当前仅对行存表有效。该子句指定该字段优先使用的压缩算法。 collation 字段排序规则名称。可选字段COLLATE指定了新字段的排序规则,如果省略,排序规则为新字段的默认类型。 USING expression USING子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个USING子句。 ALTER TYPE的USING选项实际上可以声明涉及该行旧值的任何表达式,即它可以引用除了正在被转换的字段之外其他的字段。这样,就可以用ALTER TYPE语法做非常普遍性的转换。因为这个灵活性,USING表达式并没有作用于该字段的缺省值(如果有的话),结果可能不是缺省表达式要求的常量表达式。这就意味着如果从旧类型到新类型没有隐含或者赋值转换的话,即使存在USING子句,ALTER TYPE也可能无法把缺省值转换成新的类型。在这种情况下,应该用DROP DEFAULT先删除缺省,执行ALTER TYPE,然后使用SET DEFAULT增加一个合适的新缺省值。类似的考虑也适用于涉及该字段的索引和约束。 NOT NULL | NULL 设置列是否允许空值。 integer 带符号的整数常值。当使用PERCENT时表示按照表数据的百分比收集统计信息,integer的取值范围为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值的处理方式。 默认取值:该参数默认取值为空,即NULL值可重复插入。 在对插入的新数据和表中原始数据进行列的等值比较时,对于NULL值有以下三种处理方式: NULLS DISTINCT:NULL值互不相等,即NULL值可重复插入。 NULLS NOT DISTINCT:NULL值相等。若索引列全为NULL,则NULL值不可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 NULLS IGNORE:在等值比较时跳过NULL值。若索引列全为NULL,则NULL值可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 三种处理方式具体的行为如下表所示: 表1 唯一索引中索引列NULL值的处理方式 字段控制 索引列全为NULL 部分索引列为NULL NULLS DISTINCT 可重复插入 可重复插入 NULLS NOT DISTINCT 不可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 NULLS IGNORE 可重复插入 非NULL值相等,不可插入;非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关键字,则对该表进行批量插入元组时触发该特性。 new_table_name 修改后新的表名称。 new_column_name 表中指定列修改后新的列名称。 new_constraint_name 修改后表约束的新名称。 new_schema 修改后新的模式名称。 CASCADE 级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)。 RESTRICT 如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。 schema_name 表所在的模式名称。
  • 语法格式 修改表的定义。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } 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 ] 给表增加一个新的约束。 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中。 其中列相关的操作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 STATISTICS [PERCENT] integer | ADD STATISTICS (( 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 } ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] 向表中增加一个新的字段。用ADD COLUMN增加一个字段,所有表中现有行都初始化为该字段的缺省值(如果没有声明DEFAULT子句,值为NULL)。 ADD ( { column_name data_type [ compress_mode ] } [, ...] ) 向表中增加多列。 MODIFY [ COLUMN ] column_name data_type 修改表已存在字段的数据类型。 MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] 为表的某列添加not null约束,列存表暂不支持。 MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NULL 为表的某列移除not null约束。 MODIFY [ COLUMN ] column_name DEFAULT default_expr 修改表的default值。 MODIFY [ COLUMN ] column_name ON UPDATE on_update_expr 修改表中指定列的on update表达式,该列必须为timestamp类型或者timestamptz类型,当on_update_expr为NULL值时,则为删除ON UPDATE子句。 MODIFY [ COLUMN ] column_name COMMENT comment_text 修改表的注释信息。 DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] 从表中删除一个字段,和这个字段相关的索引和表约束也会被自动删除。如果任何表之外的对象依赖于这个字段,必须声明CASCADE ,比如外键参考、视图等。 DROP COLUMN命令并不是物理上把字段删除,而只是简单地把它标记为对SQL操作不可见。随后对该表的插入和更新将在该字段存储一个NULL。因此,删除一个字段是很快的,但是它不会立即释放表在磁盘上的空间,因为被删除了的字段占据的空间还没有回收。这些空间将在执行VACUUM时而得到回收。 ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ] 改变表字段的数据类型,只允许相同大类的类型转换(数值之间,字符串之间,时间之间等)。该字段涉及的索引和简单的表约束将被自动地转换为使用新的字段类型,方法是重新分析最初提供的表达式。 ALTER TYPE要求重写整个表的特性有时候是一个优点,因为重写的过程消除了表中没用的空间。比如,要想立刻回收被一个已经删除的字段占据的空间,最快的方法是 1 ALTER TABLE table ALTER COLUMN anycol TYPE anytype; 这里的anycol是任何在表中还存在的字段,而anytype是和该字段的原类型一样的类型。这样的结果是在表上没有任何可见的语意的变化,但是这个命令强制重写,这样就删除了不再使用的数据。 ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT } 为一个字段设置或者删除缺省值。请注意缺省值只应用于随后的INSERT命令,它们不会修改表中已经存在的行。也可以为视图创建缺省,这个时候它们是在视图的ON INSERT规则应用之前插入到INSERT句中的。 ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL 修改一个字段是否允许NULL值或者拒绝NULL值。如果表在字段中包含非NULL,则只能使用SET NOT NULL。 ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer 为随后的ANALYZE操作设置针对每个字段的统计收集目标。目标的范围可以在0到10000之内设置。设置为-1时表示重新恢复到使用系统缺省的统计目标。 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 } [, ...] ) ] 为表的分区表创建索引,具体参数可参考CREATE INDEX。 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 ] 在表上创建索引,具体参数可参考CREATE INDEX。 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' ] 修改表中列信息,可将旧列名修改成新列名,以及修改列字段信息。 {ADD | DELETE} STATISTICS ((column_1_name, column_2_name [, ...])) 用于添加和删除多列统计信息声明(不实际进行多列统计信息收集),以便在后续进行全表或全库analyze时进行多列统计信息收集。每组多列统计信息最多支持32列。不支持添加/删除多列统计信息声明的表:系统表、外表。 ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] ) ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] ) 设置/重置属性选项。 属性选项定义的参数有:n_distinct、n_distinct_inherited和cstore_cu_sample_ratio。n_distinct 设置并固定表的distinct值统计信息,n_distinct_inherited 设置并固定继承表的distinct值统计信息,cstore_cu_sample_ratio 设置对cstore列存表进行analyze时所选CU的比例。目前,禁止SET/RESET n_distinct_inherited参数。 n_distinct 手动设置该列的distinct值统计信息。 取值范围:-1.0 ~ INT_MAX 默认值:0,表示不设置。 n_distinct_inherited 手动设置继承表的该列的distinct值统计信息。 取值范围:-1.0 ~ INT_MAX 默认值:0,表示不设置。 cstore_cu_sample_ratio 设置列存表执行analyze,计算需要采样的CU个数时,需要扩大的倍数。 取值范围:1.0 ~ 10000.0 默认值:1.0 ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } 为一个字段设置存储模式。这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。仅支持对行存表的设置;对列存表没有意义,执行时报错。SET STORAGE本身并不改变表上的任何东西,只是设置将来的表操作时,建议使用的策略。 其中列约束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 ] 其中表约束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 ]
  • 注意事项 只有表的所有者或者被授予了表ALTER权限的用户有权限执行ALTER TABLE命令,系统管理员默认拥有此权限。若要修改表的所有者或者修改表的模式,当前用户必须是该表的所有者或者系统管理员。 不支持修改存储参数ORIENTATION。 SET SCHEMA操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。 列存表支持PARTIAL CLUSTER KEY,不支持外键表级约束。列存表从8.1.1版本开始支持主键和唯一表级约束。 列存表支持添加字段ADD COLUMN,修改字段的数据类型ALTER TYPE,设置单个字段的收集目标SET STATISTICS,支持更改表名字,支持删除字段DROP COLUMN;对于添加的字段和修改的字段类型要求是列存支持的数据类型;ALTER TYPE的USING选项只支持常量表达式和涉及本字段的表达式,暂不支持涉及其他字段的表达式。 列存表支持的字段约束包括NULL、NOT NULL和DEFAULT常量值;对字段约束的修改,当前支持对DEFAULT值的修改(SET DEFAULT)、删除(DROP DEFAULT)和NOT NULL约束的删除; 支持对列存表添加非空约束NOT NULL以及主键约束。该约束仅8.2.0及以上集群版本支持。 修改列存表存储参数COLVERSION或者enable_delta时,不能与其他ALTER操作同时进行。
  • 续费说明 由于套餐包是先付费再使用方式,所以在您套餐包的订单到期或即将到期时,请及时续费。如果不及时续费,则可能影响您的使用。 表1 不同阶段续费说明 - 账户余额充足 账户余额不足或欠费 保留期 APM状态 可正常使用APM 冻结,不再采集并展示欠费后的应用数据,但之前的数据仍可展示、查询。 续费说明 此期间续订套餐包,可正常使用APM。如何续费 如果充值,APM自动解除冻结,按需计费。如果您需要套餐包,需要重新续订或购买。否则,APM按需计费。 如果不续订套餐包,APM自动将收费方式转为按需计费。 如果不充值,超出保留期后,所有资源被释放,此期间APM不计费。
  • 计费说明 APM提供按需计费和按需套餐包两种方式。APM支持按需计费和按需套餐包叠加的计费方式,即如果您购买了套餐包,则先扣除套餐包内实例,超出部分按需计费。如果您没有购买套餐包,则所有实例均按需计费。计费规则详见价格说明。 APM产品类型分为探针型产品和网格型产品,探针型产品版本包括基础版、专业版、企业版和铂金版,网格型产品版本包括基础版和专业版。当您从基础版切换到其他版本后,会以按需计费,如果购买了套餐包,则使用探针实例数优先在套餐包中扣除,超出套餐包额度的探针实例,则以按需计费计算价格。 探针实例使用时长不足1小时按照1小时计算。 1个专业版探针实例为1个探针计费单元,1个企业版探针实例为2个探针计费单元,1个铂金版探针实例为7个探针计费单元。 探针计费单元是指按需计费和按需套餐包计费中探针实例的基本计费单位,不同版本的探针实例都可以转化为探针计费单元。例如:用户购买按需套餐包中的100个专业版探针实例,即100个探针计费单元,该用户1小时内也可以选择使用50个企业版探针实例(100个探针计费单元/2)或者14个铂金版探针实例(100个探针计费单元/7)。
  • APM权限 默认情况下,管理员创建的IAM用户没有任何权限,您需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对APM进行操作。 APM部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该策略仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问APM时,需要先切换至授权区域。 如表1所示,包括了APM的所有系统权限。 表1 APM系统权限 角色名称 描述 类别 APM FullAccess 应用性能管理服务的所有执行权限。 系统策略 APM ReadOnlyAccess 应用性能管理服务的只读权限。 系统策略 APM Administrator 应用性能管理服务的所有执行权限。 系统角色 表2列出了APM常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表2 常用操作与系统权限的关系 操作 APM FullAccess APM ReadOnlyAccess APM Administrator 获取应用拓扑信息 √ √ √ 修改应用拓扑配置 √ x √ 删除应用拓扑配置 √ x √ 创建应用拓扑配置 √ x √ 获取慢SQL分析结果 √ √ √ 获取调用链数据 √ √ √ 更新调用链配置 √ x √ 查询应用性能管理配置 √ √ √ 添加应用性能管理配置 √ x √ 删除应用性能管理配置 √ x √ 查询ICAgent列表 √ √ √ 安装ICAgent √ x √ 获取ICAgent版本信息 √ √ √ 升级ICAgent版本 √ x √ 卸载ICAgent √ x √ 下发ICAgent事件 √ x √
  • APM支持的JAVA类型 APM支持JAVA类应用,目前已支持多种主流Java框架、web服务器、通讯协议、数据库等,可实现应用轻松接入。当前支持的类型详见表 APM支持的Java类型。 表2 APM支持的Java类型 类型 名称 版本 工具 JDK jdk7、jdk8 通讯协议 httpclient apache httpclient3、apache httpclient4、jdk httpurlconnection Java框架 CXF Client 2.6.0~3.2.1 iBatis 2.3.0、2.3.4.726 jersey 2.0~2.9.1 mybatis 1.0.0~1.3.1(Mybatis-Spring)、3.0.1~3.4.5(Mybatis3) spring 3.1.x~5.0.x springboot 1.2.x~1.5.x、2.0.4~2.0.9 Dubbo 2.5.3~2.6.2(Dubbo RPC、Dubbo REST)、2.8.4(Dubbo RPC、Dubbo REST) CSE(HuaWei) 1.0.0.B011~1.1.0.B046(REST over Servlet、REST over Vert.x、Highway RPC) gRPC 1.11.x~1.14.x 数据库 MySQL mysql-connector-java 5.1.X Oracle ojdbc5、ojdbc6、ojdbc14 Sybase 2.6.0~3.2.1 mariadb 1.3.x voltdb 6.x~7.x PostgreSQL 9.0.x, 9.1.x, 9.2.x, 9.3.x, 9.4.x, 42.0.x, 42.1.x web服务器 Tomcat 6.x、7.x、8.x Jetty 7.6.x~8.0.0, 8.1.x~9.x.x JBoss 说明: JBoss在使用javaagent探针的时候,需要特殊的设置。详见如何对JBoss Standalone模式接入APM。 7.0.0~12.0.0 undertow 1.4.x 消息队列 ActiveMQ 5.6.x~5.15.x RocketMQ 4.1.x~4.2.x RabbitMQ 1.3.3+(spring-rabbit)、2.7.x(amqp-client)、2.6.0、3.6.5 Kafka 0.9.0.1~0.10.0.2 NoSQL Redis jedis 2.0.0~2.9.0 Memcache 2.9.0~2.12.3(arcus) Mongodb 3.0.x~3.6.x Casandra 2.1.x~3.2.x zookeeper 1.0.x(com.github.adyliu.zkclient)、0.1.x(com.github.sgroschupf.zkclient) ElasticSearch 2.4.x、5.1.x Rest Client Common HTTP 2.x、3.x、4.x(httpclient)、ALL(HttpURLConnection)
  • ICAgent支持的Linux操作系统 ICAgent支持多个Linux操作系统,在购买弹性云服务器时您选择ICAgent支持的操作系统,详见表1。 表1 支持的操作系统及版本 操作系统 版本 SUSE SUSE Enterprise 11 SP4 64bit SUSE Enterprise 12 SP1 64bit SUSE Enterprise 12 SP2 64bit SUSE Enterprise 12 SP3 64bit OpenSUSE 13.2 64bit 15.0 64bit 暂不支持syslog日志采集。 42.2 64bit EulerOS 2.2 64bit 2.3 64bit 2.5 64bit CentOS 6.3 64bit 6.5 64bit 6.8 64bit 6.9 64bit 6.10 64bit 7.1 64bit 7.2 64bit 7.3 64bit 7.4 64bit 7.5 64bit 7.6 64bit 7.7 64bit 7.8 64bit 7.9 64bit 8.0 64bit 8.1 64bit 8.2 64bit Ubuntu 16.04 server 64bit 18.04 server 64bit 22.04 server 64bit 24.04 server 64bit Fedora 24 64bit 25 64bit 29 64bit Debian 7.5.0 32bit 7.5.0 64bit 8.2.0 64bit 8.8.0 64bit 9.0.0 64bit 对于Linux x86_64服务器,ICAgent支持上表中所有的操作系统及版本。 对于Linux ARM服务器,CentOS操作系统仅支持7.4 及其以上版本,上表所列的其他操作系统对应版本均支持。
  • 网格型产品按需套餐包-专业版价格详情 表5 专业版价格详情 区域 探针实例(个) 包1月 包1年 价格单位 华北-北京四 华南-广州 10 500 5,000 元 20 1,000 10,000 元 50 2,500 25,000 元 100 5,000 50,000 元 200 10,000 100,000 元 500 25,000 250,000 元 1,000 50,000 500,000 元 2,000 100,000 1,000,000 元
  • 探针型产品按需套餐包-铂金版价格详情 表3 铂金版价格详情 区域 探针实例(个) 包1月 包1年 价格单位 华北-北京四 华东-上海一 华南-广州 西南-贵阳一 200 140,000 1,400,000 元 500 280,000 2,800,000 元 1,000 595,000 5,950,000 元 2,000 980,000 9,800,000 元 中国-香港 200 227,509 2,275,112 元 500 455,018 4,550,232 元 1,000 966,924 9,669,244 元 2,000 1,592,578 15,925,808 元 亚太-新加坡 200 220,915 2,209,167 元 500 441,829 4,418,341 元 1,000 938,898 9,388,976 元 2,000 1,546,416 15,464,190 元 亚太-曼谷 200 227,509 2,275,112 元 500 455,018 4,550,232 元 1,000 966,924 9,669,244 元 2,000 1,592,578 15,925,808 元 拉美-圣地亚哥 200 237,400.71 2,374,030.15 元 500 474,801.42 4,748,067.99 元 1,000 1,008,964.54 10,089,645.45 元 2,000 1,661,820.34 16,618,234.13 元 非洲-约翰内斯堡 200 220,915 2,209,167 元 500 441,829 4,418,341 元 1,000 938,898 9,388,976 元 2,000 1,546,416 15,464,190 元
  • 探针型产品按需套餐包-企业版价格详情 表2 企业版价格详情 区域 探针实例(个) 包1月 包1年 价格单位 华北-北京四 华东-上海一 华南-广州 西南-贵阳一 10 2,000 20,000 元 20 4,000 40,000 元 50 10,000 100,000 元 100 18,000 180,000 元 200 36,000 360,000 元 500 80,000 800,000 元 1,000 140,000 1,400,000 元 2,000 280,000 2,800,000 元 中国-香港 10 3,249 32,496 元 20 6,498 64,999 元 50 16,244 162,502 元 100 29,247 292,508 元 200 58,502 585,024 元 500 130,006 1,300,062 元 1,000 227,509 2,275,112 元 2,000 455,018 4,550,232 元 亚太-新加坡 10 3,155 31,554 元 20 6,309 63,115 元 50 15,773 157,792 元 100 28,399 284,030 元 200 56,806 568,067 元 500 126,238 1,262,379 元 1,000 220,915 2,209,167 元 2,000 441,829 4,418,341 元 亚太-曼谷 10 3,249 32,496 元 20 6,498 64,999 元 50 16,244 162,502 元 100 29,247 292,508 元 200 58,502 585,024 元 500 130,006 1,300,062 元 1,000 227,509 2,275,112 元 2,000 455,018 4,550,232 元 拉美-圣地亚哥 10 3,390.12 33,908.9 元 20 6,780.24 67,825.48 元 50 16,950.6 169,567.54 元 100 30,518.78 305,226.19 元 200 61,045.24 610,460.06 元 500 135,658.65 1,356,586.46 元 1,000 237,400.71 2,374,030.15 元 2,000 474,801.42 4,748,067.99 元 非洲-约翰内斯堡 10 3,155 31,554 元 20 6,309 63,115 元 50 15,773 157,792 元 100 28,399 284,030 元 200 56,806 568,067 元 500 126,238 1,262,379 元 1,000 220,915 2,209,167 元 2,000 441,829 4,418,341 元
  • 探针型产品按需套餐包-专业版价格详情 表1 专业版价格详情 区域 探针实例(个) 包1月 包1年 价格单位 华北-北京四 华东-上海一 华南-广州 西南-贵阳一 10 1,000 10,000 元 20 2,000 20,000 元 50 5,000 50,000 元 100 10,000 100,000 元 200 18,000 180,000 元 500 42,500 425,000 元 1,000 80,000 800,000 元 2,000 140,000 1,400,000 元 中国-香港 10 1,621 16,244 元 20 3,249 32,496 元 50 8,118 81,251 元 100 16,244 162,502 元 200 29,247 292,508 元 500 69,066 690,660 元 1,000 130,006 1,300,062 元 2,000 227,509 2,275,112 元 亚太-新加坡 10 1,574 15,773 元 20 3,155 31,554 元 50 7,883 78,896 元 100 15,773 157,792 元 200 28,399 284,030 元 500 67,064 670,641 元 1,000 126,238 1,262,379 元 2,000 220,915 2,209,167 元 亚太-曼谷 10 1,621 16,244 元 20 3,249 32,496 元 50 8,118 81,251 元 100 16,244 162,502 元 200 29,247 292,508 元 500 69,066 690,660 元 1,000 130,006 1,300,062 元 2,000 227,509 2,275,112 元 拉美-圣地亚哥 10 1,691.22 16,950.6 元 20 3,390.12 33,908.9 元 50 8,471.46 84,783.77 元 100 16,950.6 169,567.54 元 200 30,518.78 305,226.19 元 500 72,068.9 720,688.96 元 1,000 135,658.65 1,356,586.46 元 2,000 237,400.71 2,374,030.15 元 非洲-约翰内斯堡 10 1,574 15,773 元 20 3,155 31,554 元 50 7,883 78,896 元 100 15,773 157,792 元 200 28,399 284,030 元 500 67,064 670,641 元 1,000 126,238 1,262,379 元 2,000 220,915 2,209,167 元
  • 注册华为账号并开通华为云 在使用obsfs之前,您需要拥有一个华为账号并且成功开通OBS。OBS提供按需和资源包两种计费方式,充值或购买资源包即开通OBS服务。成功开通OBS后即可进行访问和使用。如果您已有账号且账号已开通OBS服务,可以略过此部分内容。 打开华为云网站www.huaweicloud.com。 注册账号。 使用OBS前需注册一个华为账号。如果您已有账号,请从3开始。 在顶部导航栏右侧,单击“注册”。 在注册页面,根据提示信息完成注册。 注册成功后,系统会自动跳转至您的个人信息界面。 在顶部导航栏右侧,单击“登录”,输账号名和密码。 在顶部导航栏右侧,单击“控制台”,进入华为云控制台。
  • 操作步骤 登录OBS Browser+。 在页面上区域单击“创建桶”。 在弹出的对象框中根据需要填写桶信息,如图1所示。 图1 创建桶 表1 创建桶 参数 说明 区域 选择新建桶所在的Region。桶创建成功后,不支持变更区域,请谨慎选择。 存储类别 桶的存储类别。不同的存储类别可以满足客户业务对存储性能、成本的不同诉求。 标准存储:适用于有大量热点文件或小文件,且需要频繁访问(平均一个月多次)并快速获取数据的业务场景。 低频访问存储:适用于不频繁访问(平均一年少于12次),但需要快速获取数据的业务场景。 归档存储:适用于很少访问(平均一年一次),且对数据获取速率要求不高的业务场景。 更多详情请参见存储类别。 桶ACL 桶的读写权限控制。 私有:除桶ACL授权外的其他用户无桶的访问权限。 公共读:任何用户都可以对桶内对象进行读操作。 公共读写:任何用户都可以对桶内对象进行读/写/删除操作。 多AZ 开启多AZ后,数据冗余存储至多个AZ中。 请根据业务情况提前规划是否开启多AZ功能,桶一旦创建成功,后续无法修改多AZ功能的启停状态。 桶名称 输入需要创建的桶的名称,“桶名称”需全局唯一。 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用类IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 可以单击桶名输入框后的了解桶的命名规则详情,每个用户最多可在OBS 对象存储中创建100个桶。 由于通过URL访问桶时,桶名会作为URL的一部分,根据DNS标准,URL不支持大写字母,无法区分带大写字母的桶。因此,“桶名称”仅支持小写字母、数字、“-”、“.”作为桶的命名规则。例如:如果想通过URL访问名为“MyBucket”的桶,该URL将解析成名为“mybucket”的桶,导致访问出错。 DNS命名规范方便全局统一,方便在访问桶时对桶进行解析,可以使客户受益于新功能和优化性能,并支持对桶进行静态网站托管。 桶创建成功后,不能修改名称,创建时,请设置合适的桶名。 单击确认后,如果创建成功,会立即在桶列表中看到刚刚创建的桶。如果创建失败,会在界面上显示错误信息。
  • 代码样例 通过构造函数创建OBS客户端,永久访问密钥(AK/SK)创建OBS客户端代码如下: # 引入模块 from obs import ObsClient # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 securityToken值 obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) # 使用访问OBS # 关闭obsClient obsClient.close() 临时访问密钥(AK/SK和SecurityToken)创建OBS客户端代码如下: # 引入模块 from obs import ObsClient # 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取 security_token = os.getenv("SecurityToken") # server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsClient实例 # 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值 obsClient = ObsClient( access_key_id=ak, secret_access_key=sk, server=server, security_token=security_token ) # 使用访问OBS # 关闭obsClient obsClient.close() 指定获取临时访问密钥的方式 使用单一的获取方式,以从环境变量获取访问密钥的方式为例: # 引入模块 from obs import ObsClient from obs import loadtoken # 创建ObsClient实例 # 提供ENV方式获取访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_providers=[loadtoken.ENV] ) # 使用访问OBS # 关闭obsClient obsClient.close() 通过配置系统环境变量的方式或者通过访问ECS服务器获取临时访问密钥的方式创建OBS客户端。 使用ENV方式创建OBS客户端的代码如下: # 引入模块 from obs import ObsClient # 创建ObsClient实例 # 提供ENV方式获取访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='ENV' ) # 使用访问OBS # 关闭obsClient obsClient.close() 以上方式会从当前系统的环境变量中寻找访问密钥,需要对应在环境变量中定义OBS_ACCESS_KEY_ID、OBS_SECRET_ACCESS_KEY字段。同时如果采用临时访问密钥时,还需要在环境变量中定义OBS_SECURITY_TOKEN字段。 使用ECS方式创建OBS客户端的代码如下: # 引入模块 from obs import ObsClient # 创建ObsClient实例 # 提供ECS方式获取临时访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='ECS' ) # 使用访问OBS # 关闭obsClient obsClient.close() 当应用程序部署在ECS服务器上时,可以采用以上方式从ECS服务器上自动获取临时访问密钥和定期自动刷新。 如果客户端报401错误,则需要排查在创建ECS时是否有添加委托。 在使用该方式获取临时访问密钥时,请确保服务端和应用程序部署所在环境的UTC时间一致,否则可能会导致临时访问密钥无法及时刷新的问题。 除了上述指定一种方式获取访问密钥外,还可以以链式的形式从环境变量及ECS服务器上进行搜索以获取对应的访问密钥。 通过设定security_provider_policy参数为OBS_DEFAULT来指定OBS客户端以链式的方式搜索访问密钥: # 引入模块 from obs import ObsClient # 创建ObsClient实例 # 以链式的方式从环境变量和ECS中搜索访问密钥 obsClient = ObsClient( server='https://your-endpoint', security_provider_policy='OBS_DEFAULT' ) # 使用访问OBS # 关闭obsClient obsClient.close() 以上方式通过设定security_provider_policy为OBS_DEFAULT,可以指定以链式的方式从预定义方式列表中搜索访问密钥。当前默认提供从环境变量中以及从ECS服务器上获取访问密钥两种预定义搜索方式,并按照先从环境变量,再从ECS服务器的顺序进行搜索。链式搜索方式会以第一组成功获取到的访问密钥创建OBS客户端。 工程中可以有多个ObsClient,也可以只有一个ObsClient。 ObsClient是线程安全的,可在并发场景下使用。
  • 构造函数参数描述 参数 描述 建议值 access_key_id 访问密钥中的AK。默认为空字符串表示匿名用户。 N/A secret_access_key 访问密钥中的SK。默认为空字符串表示匿名用户。 N/A security_token 临时访问密钥中的SecurityToken。 如何获取临时访问密钥和securitytoken请参见临时访问密钥AK/SK获取; N/A server 连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议) N/A max_retry_count HTTP/HTTPS连接异常时的请求重试次数。默认为3次。 [1,5] max_redirect_count HTTP/HTTPS请求重定向的最大次数。默认为10次 [1, 10] timeout HTTP/HTTPS请求超时时间(单位:秒)。默认为60秒。 [10, 60] ssl_verify 验证服务端证书参数,即验证服务端证书与客户端证书配置的证书是否一致。可能的取值: 服务端pem格式根证书文件路径。 True:从操作系统根证书库中获取服务端证书列表并验证服务端证书(仅支持Windows操作系统)。 False:表示不验证服务端证书。 默认为False。 N/A chunk_size 读写socket流时的块大小(单位:字节),您可以根据自身需求设置块大小。默认为65536字节。 默认 long_conn_mode 是否启用长连接模式。默认为False。 N/A proxy_host 代理服务器的主机地址。默认为空。 说明: 请注意,代理服务器的主机地址不要指定http://或https://; N/A proxy_port 代理服务器的端口号。默认为空。 N/A proxy_username 连接代理服务器时使用的用户名。默认为空。 N/A proxy_password 连接代理服务器时使用的用户密码。默认为空。 N/A is_cname 是否通过自定义域名访问OBS服务。默认为False。 更多关于自定义域名相关信息请参见自定义域名。 N/A security_providers 指定允许的访问密钥搜索方式,OBS客户端将使用该参数指定的搜索方式,搜索并获取访问密钥。默认为None。 说明: security_providers参数必须采用列表形式,默认情况下security_providers为None,此时默认提供从环境变量中获取访问密钥,或从ECS服务器获取临时访问密钥两种方式作为security_providers的默认搜索方式。 当指定了security_providers参数时,则不会提供默认搜索方式,此时仅可以使用security_providers中提供的搜索方式。 N/A security_provider_policy 指定访问密钥搜索策略。默认为None。 说明: security_provider_policy参数用于设置搜索策略,默认为None,此时需要显示指定访问密钥;同时,在已经指定了访问密钥参数的情况下,security_provider_policy参数将被忽略。 security_provider_policy设置为OBS_DEFAULT时采用链式搜索方式获取访问密钥; 设置security_provider_policy为预定义方式名(ENV,ECS)时采用对应方式获取访问密钥。 N/A 建议值为N/A的表示需要根据实际情况进行设置。 如网络状况不佳,建议增大timeout的值。 如果设置的server不带协议类型,则默认使用HTTPS协议。 如果启用了长连接模式,使用完OBS客户端后必须调用ObsClient.close方法显式关闭,回收连接资源。 出于DNS解析性能和OBS服务可靠性的考虑,不允许将server设置为IP,必须使用域名访问OBS服务。
  • 生命周期管理简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS允许您对桶设置生命周期规则,实现自动转换对象的存储类型、自动淘汰过期的对象,以有效利用存储特性,优化存储空间。针对不同前缀的对象,您可以同时设置多条规则。一条规则包含: 规则ID,用于标识一条规则,不能重复。 受影响的对象前缀,此规则只作用于符合前缀的对象。 最新版本对象的转换策略,指定方式为: 指定满足前缀的对象创建后第几天时转换为指定的存储类型。 直接指定满足前缀的对象转换为指定的存储类型的日期。 最新版本对象过期时间,指定方式为: 指定满足前缀的对象创建后第几天时过期。 直接指定满足前缀的对象过期日期。 历史版本对象转换策略,指定方式为: 指定满足前缀的对象成为历史版本后第几天时转换为指定的存储类型。 历史版本对象过期时间,指定方式为: 指定满足前缀的对象成为历史版本后第几天时过期。 是否生效标识。 更多关于生命周期的内容请参考生命周期管理。 对象过期后会被OBS服务端自动删除。 对象转换策略中的时间必须早于对象过期时间;历史版本对象转换策略中的时间也必须早于历史版本对象的过期时间。 桶的多版本状态必须处于Enabled或者Suspended,历史版本对象转换策略和历史版本对象过期时间配置才能生效。 父主题: 生命周期管理
  • 静态网站托管简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以将静态网站文件上传至OBS的桶中作为对象,并对这些对象赋予公共读权限,然后将该桶配置成静态网站托管模式,以实现在OBS上托管静态网站的目的。第三方用户在访问您网站的时候,实际上是在访问OBS的桶中的对象。在使用静态网站托管功能时,OBS还支持配置请求重定向,通过重定向配置您可以将特定的请求或所有请求实施重定向。 更多关于静态网站托管的内容请参考静态网站托管。 父主题: 静态网站托管
  • 静态网站托管简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。 您可以将静态网站文件上传至OBS的桶中作为对象,并对这些对象赋予公共读权限,然后将该桶配置成静态网站托管模式,以实现在OBS上托管静态网站的目的。第三方用户在访问您网站的时候,实际上是在访问OBS的桶中的对象。在使用静态网站托管功能时,OBS还支持配置请求重定向,通过重定向配置您可以将特定的请求或所有请求实施重定向。 更多关于静态网站托管的内容请参考静态网站托管。 父主题: 静态网站托管
  • SDK编译 获取到SDK源码后,根据使用平台来开展编译工作。 linux下: linux可以直接进入到source/eSDK_OBS_API/eSDK_OBS_API_C++/下执行下面的脚本来编译(x86和arm略有不同请注意): export SPDLOG_VERSION=spdlog-1.9.2 #x86执行这条命令 bash build.sh sdk #arm执行这条命令 bash build_aarch.sh sdk 具体参数可见脚本内注释,生成产物为一个包含了demo代码,include,和lib的demo包(包名为sdk.tgz)。 Windows下: 使用visual studio打开source/eSDK_OBS_API/eSDK_OBS_API_C++/sln/vc100/下的sln工程,生成obs项目,即可在输出目录(可在工程属性中查看)生成huaweisecurec.lib,huaweisecurec.dll,libeSDKOBS.lib和libeSDKOBS.dll。 详细步骤请参见Windows下编译C SDK MAC下: 参照compile_for_macos.txt 常见编译问题见:常见编译问题
  • 初始化SDK 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。 OBS客户端(ObsClient)是访问OBS服务的C客户端,它为调用者提供一系列与OBS服务进行交互的接口,用于管理、操作桶(Bucket)和对象(Object)等OBS服务上的资源。使用OBS C SDK发起OBS请求,您需要先调用初始化接口,在进程退出的时候调用取消初始化的接口,释放资源。 在使用C SDK前要先调用初始化接口obs_initialize,而且进程中只需要调用一次: obs_status ret_status = OBS_STATUS_BUTT; ret_status = obs_initialize(OBS_INIT_ALL); if (OBS_STATUS_OK != ret_status) { printf("obs_initialize failed(%s).\n", obs_get_status_name(ret_status)); return ret_status; } obs_deinitialize(); // 请不要多次调用obs_initialize和obs_deinitialize,否则会导致程序访问无效的内存 父主题: 初始化
  • 自定义域名访问介绍与配置 当以自定义域名访问OBS桶时,需要先将该自定义域名同对应OBS桶访问域名进行绑定,相关配置请参见自定义域名绑定简介,自定义域名绑定配置。 当在自定义域名上配置了CDN加速服务,即自定义域名为CDN服务的加速域名时,需要额外对CDN服务进行配置,以保证可以正常采用自定义域名访问OBS服务。 以华为云CDN服务为例,相关配置如下所示: 登录华为云CDN服务,从CDN服务左侧列表中选择域名管理项,在该项中可以查看到所有配置的CDN服务域名信息。 配置源站。单击要使用的自定义域名项,进入域名配置界面,编辑源站配置,选择主源站类型为源站域名类型,对应源站为要访问的OBS桶域名。 配置回源HOST。回源HOST必须指定为加速域名即访问OBS服务时访问的自定义域名,否则可能会出现回源鉴权失败的问题。
  • 生命周期管理简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。 OBS允许您对桶设置生命周期规则,实现自动转换对象的存储类型、自动淘汰过期的对象,以有效利用存储特性,优化存储空间。针对不同前缀的对象,您可以同时设置多条规则。一条规则包含 规则ID,用于标识一条规则,不能重复。 受影响的对象前缀,此规则只作用于符合前缀的对象。 最新版本对象的转换策略,指定方式为: 指定满足前缀的对象创建后第几天时转换为指定的存储类型。 直接指定满足前缀的对象转换为指定的存储类型的日期。 最新版本对象过期时间,指定方式为: 指定满足前缀的对象创建后第几天时过期。 直接指定满足前缀的对象过期日期。 历史版本对象转换策略,指定方式为: 指定满足前缀的对象成为历史版本后第几天时转换为指定的存储类型。 历史版本对象过期时间,指定方式为: 指定满足前缀的对象成为历史版本后第几天时过期。 是否生效标识。 更多关于生命周期的内容请参考生命周期管理。 对象过期后会被OBS服务端自动删除。 对象转换策略中的时间必须早于对象过期时间;历史版本对象转换策略中的时间也必须早于历史版本对象的过期时间。 桶必须开启多版本状态,历史版本对象转换策略和历史版本对象过期时间配置才能生效。 父主题: 生命周期管理
  • 静态网站托管简介(Java SDK) 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。 您可以将静态网站文件上传至OBS的桶中作为对象,并对这些对象赋予公共读权限,然后将该桶配置成静态网站托管模式,以实现在OBS上托管静态网站的目的。第三方用户在访问您网站的时候,实际上是在访问OBS的桶中的对象。在使用静态网站托管功能时,OBS还支持配置请求重定向,通过重定向配置您可以将特定的请求或所有请求实施重定向。 更多关于静态网站托管的内容请参考静态网站托管。 父主题: 静态网站托管(Java SDK)
  • 生命周期管理简介 OBS允许您对桶设置生命周期规则,实现自动转换对象的存储类型、自动淘汰过期的对象,以有效利用存储特性,优化存储空间。针对不同前缀的对象,您可以同时设置多条规则。一条规则包含: 规则ID,用于标识一条规则,不能重复。 受影响的对象前缀,此规则只作用于符合前缀的对象。 最新版本对象的转换策略,指定方式为: 指定满足前缀的对象创建后第几天时转换为指定的存储类型。 直接指定满足前缀的对象转换为指定的存储类型的日期。 最新版本对象过期时间,指定方式为: 指定满足前缀的对象创建后第几天时过期。 直接指定满足前缀的对象过期日期。 历史版本对象转换策略,指定方式为: 指定满足前缀的对象成为历史版本后第几天时转换为指定的存储类型。 历史版本对象过期时间,指定方式为: 指定满足前缀的对象成为历史版本后第几天时过期。 是否生效标识。 更多关于生命周期的内容请参考生命周期管理。 对象过期后会被OBS服务端自动删除。 对象转换策略中的时间必须早于对象过期时间;历史版本对象转换策略中的时间也必须早于历史版本对象的过期时间。 桶必须开启多版本状态,历史版本对象转换策略和历史版本对象过期时间配置才能生效。 父主题: 生命周期管理
  • 静态网站托管简介 您可以将静态网站文件上传至OBS的桶中作为对象,并对这些对象赋予公共读权限,然后将该桶配置成静态网站托管模式,以实现在OBS上托管静态网站的目的。第三方用户在访问您网站的时候,实际上是在访问OBS的桶中的对象。在使用静态网站托管功能时,OBS还支持配置请求重定向,通过重定向配置您可以将特定的请求或所有请求实施重定向。 更多关于静态网站托管的内容请参考静态网站托管。 父主题: 静态网站托管
  • 自定义域名访问介绍与配置 当以自定义域名访问OBS桶时,需要先将该自定义域名同对应OBS桶访问域名进行绑定,相关配置请参见自定义域名绑定简介,自定义域名绑定配置。 当在自定义域名上配置了CDN加速服务,即自定义域名为CDN服务的加速域名时,需要额外对CDN服务进行配置,以保证可以正常采用自定义域名访问OBS服务。 以华为云CDN服务为例,相关配置如下所示: 登录华为云CDN服务,从CDN服务左侧列表中选择域名管理项,在该项中可以查看到所有配置的CDN服务域名信息。 配置源站。单击要使用的自定义域名项,进入域名配置界面,编辑源站配置,选择主源站类型为源站域名类型,对应源站为要访问的OBS桶域名。 配置回源HOST。回源HOST必须指定为加速域名即访问OBS服务时访问的自定义域名,否则可能会出现回源鉴权失败的问题。
  • 获取桶存储类型 您可以通过ObsClient.GetBucketStoragePolicy获取桶存储类型。以下代码展示如何获取桶存储类型: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 获取桶存储类型 try { GetBucketStoragePolicyRequest request = new GetBucketStoragePolicyRequest() { BucketName = "bucketName", }; GetBucketStoragePolicyResponse response = client.GetBucketStoragePolicy(request); Console.WriteLine("Get bucket storage policy response: {0}", response.StatusCode); Console.WriteLine("StorageClass: {0}", response.StorageClass); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
共100000条