华为云用户手册

  • 获取账号、用户、项目的名称和ID 从控制台获取账号名、账号ID、用户名、用户ID、项目名称、项目ID 在华为云首页右上角,单击“控制台”。 在右上角的用户名中选择“我的凭证”。 图1 进入我的凭证 在“我的凭证”界面,API凭证页签中,查看账号名、账号ID、用户名、用户ID、项目名称、项目ID。 图2 查看账号名、账号ID、用户名、用户ID、项目名称、项目ID 调用API获取用户ID、项目ID 获取用户ID请参考:管理员查询IAM用户列表。 获取项目ID请参考:查询指定条件下的项目列表。 父主题: 获取调用信息
  • 示例 为一个INSERT语句创建一个预备语句,然后执行它: 1 2 PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52');
  • 示例 使用ANALYZE语句更新表customer_info统计信息: 1 ANALYZE customer_info; 使用ANALYZE VERBOSE语句更新表customer_info统计信息,并输出表的相关信息: 1 2 3 4 5 ANALYZE VERBOSE customer_info; INFO: analyzing "cstore.pg_delta_3394584009"(cn_5002 pid=53078) INFO: analyzing "public.customer_info"(cn_5002 pid=53078) INFO: analyzing "public.customer_info" inheritance tree(cn_5002 pid=53078) ANALYZE
  • 功能描述 用于收集有关数据库中表内容的统计信息,统计结果存储在系统表PG_STATISTIC下。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column和partition_name参数把分析限定在特定的表、列或分区表中。 能够执行ANALYZE特定表的用户,包括表的所有者、表所在数据库的所有者、通过GRANT被授予该表上ANALYZE权限的用户或者被授予了gs_role_analyze_any角色的用户以及有SYSADMIN属性的用户。 在百分比采样收集统计信息时,用户需要被授予ANALYZE和SELECT权限。 ANALYZE|ANALYSE VERIFY用于检测数据库中普通表(行存表、列存表)的数据文件是否损坏,目前此命令暂不支持HDFS表。
  • 语法格式 收集表的统计信息。 1 2 { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]; 收集分区表的统计信息。 1 2 3 { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] PARTITION ( patrition_name ) ; 普通分区表目前支持针对某个分区的统计信息的语法,但功能上不支持针对某个分区的统计信息收集。对指定分区执行ANALYZE,会有相应的WARNING提示。 收集外表的统计信息。 1 2 { ANALYZE | ANALYSE } [ VERBOSE ] { foreign_table_name | FOREIGN TABLES };
  • 注意事项 仅8.1.1及以上集群版本支持在匿名块、事务块、函数或存储过程内对单表进行ANALYZE操作。 对于ANALYZE全库,库中各表的ANALYZE处于不同的事务中,所以不支持在匿名块、事务块、函数或存储过程内对全库执行ANALYZE。 统计信息的回滚操作不支持PG_CLASS中相关字段的回滚。 ANALYZE VERIFY操作处理的大多为异常场景检测需要使用RELEASE版本。ANALYZE VERIFY场景不触发远程读,因此远程读参数不生效。对于关键系统表出现错误被系统检测出页面损坏时,将直接报错不再继续检测。
  • 参数说明 VERBOSE 启用显示进度信息。 如果指定了VERBOSE,ANALYZE发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。 table_name 需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。 对于ANALYZE收集统计信息,目前仅支持行存表、列存表、HDFS表、ORC格式的OBS外表、CARBONDATA格式的OBS外表、协同分析的外表。 取值范围:已有的表名。 column_name,column_1_name,column_2_name 需要分析特定列的列名,默认为所有列。 取值范围:已有的列名。 partition_name 如果table为分区表,在关键字PARTITION后面指定分区名partition_name表示分析该分区表的统计信息。目前语法上支持分区表做ANALYZE,但功能实现上暂不支持对指定分区统计信息的分析。 取值范围:表的某一个分区名。 foreign_table_name 需要分析的特定外表的表名(可能会带模式名),该表的数据存放于HDFS分布式文件系统中。 取值范围:已有的表名。 FOREIGN TABLES 分析所有当前用户权限下,数据位于HDFS分布式文件系统中的HDFS外表。 index_name 需要分析的特定索引表的表名(可能会带模式名)。 取值范围:已有的表名。 FAST|COMPLETE 对于行存表,FAST模式下主要对于行存表的CRC和page header进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对行存表的指针、tuple进行解析校验。 对于列存表,FAST模式下主要对于列存表的CRC和magic进行校验,如果校验失败则会告警;而COMPLETE模式下,则主要对列存表的CU进行解析校验。 CASCADE CASCADE模式下会对当前表的所有索引进行检测处理。
  • XMLSERIALIZE ( { DOCUMENT | CONTENT } value AS type 描述:从XML类型的值生成一个字符串。 返回值类型:type,可以是character,character varying或text(或其别名) 示例: 1 2 3 4 5 SELECT xmlserialize(content 'good' AS CHAR(10)); xmlserialize -------------- good (1 row)
  • 示例 建立一个hdfs_server,其中hdfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000', hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop', type 'HDFS' ) ; 建立一个obs_server,其中dfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( address 'obs.xxx.xxx.com', access_key 'xxxxxxxxx', secret_access_key 'yyyyyyyyyyyyy', type 'obs' ); 建立一个dli_server,其中dfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 7 8 9 CREATE SERVER dli_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( address 'obs.xxx.xxx.com', access_key 'xxxxxxxxx', secret_access_key 'yyyyyyyyyyyyy', type 'dli', dli_address 'dli.xxx.xxx.com', dli_access_key 'xxxxxxxxx', dli_secret_access_key 'yyyyyyyyyyyyy' ); 建立另外一个同构集群的server,其中gc_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000', dbname 'test', username 'test', password '{Password}' );
  • 参数说明 server_name 要创建的外部服务器的名称。服务器名称在数据库中必须唯一。 取值范围:长度必须小于等于63。 FOREIGN DATA WRAPPER fdw_name 指定外部数据封装器的名字。 取值范围:fdw_name是数据库初始化时系统创建的数据封装器,目前对于HDFS集群,fdw_name的名字可以是hdfs_fdw或者dfs_fdw,对于其他同构集群,fdw_name为gc_fdw。 OPTIONS ( { option_name ' value ' } [, ...] ) 用于指定外部服务器的各类参数,详细的参数说明如下所示: address 指定的OBS服务终端节点或HDFS集群的IP地址。 OBS:OBS服务的终端节点(Endpoint)。 HDFS:HDFS集群的元数据节点(NameNode)所在的IP地址以及端口,或者同构其他集群的CN的IP地址以及端口。 为保证HA(High Availability),HDFS NameNode经常采用主备模式。主备NameNode的地址都需要加入到address值中。GaussDB(DWS)访问HDFS服务时,会动态查找当前处于active状态的主NameNode。 若HDFS为联邦模式时,可将Router的地址都加入到address值中,GaussDB(DWS)访问HDFS服务时,会动态随机查找当前处于active状态的Router。 address option必须存在,若用于跨集群互联互通场景则只允许设置1个。 当server类型为DLI时,address为DLI服务上数据所存储的OBS address。 若HDFS为联邦模式时,即fed 'rbf',address可设置为多组IP、port,对应为HDFS Router的address。 hdfscfgpath 该参数仅支持type为HDFS时设置。 用户通过配置hdfscfgpath参数来指定HDFS配置文件路径。GaussDB(DWS)会根据配置文件路径下的HDFS配置文件指定的连接配置方式,以及安全模式,来访问HDFS集群。非安全模式连接HDFS集群时,不支持数据传输加密。 如果没有指定address选项,默认采用hdfscfgpath指定的配置文件中指定的address。 fed 表示dfs_fdw连接的是HDFS为联邦模式。 取值rbf,表示HDFS为联邦rbf方式。 该参数8.1.2及以上版本支持。 encrypt 是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为off。 取值范围: on表示对数据进行加密。 off表示不对数据进行加密。 access_key OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 secret_access_key OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 type 表示dfs_fdw连接的类型。 取值范围: OBS表示连接的是OBS。 HDFS表示连接的是HDFS。 DLI表示连接的是DLI。 dli_address DLI服务的终端节点,即endpoint。该参数仅支持type为DLI时设置。 dli_access_key DLI访问协议对应的AK值(DLI云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为DLI时设置。 dli_secret_access_key DLI访问协议对应的SK值(DLI云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为DLI时设置。 dbname 用于协同分析、跨集群互联互通,表示将要连接的远端集群的数据库名字。 username 用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名。 password 用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名密码。 对于云下集群迁移到云上的场景,从云下集群导出的server配置中密码为密文,由于云上和云下集群加解密的密钥不同,如果直接在云上集群执行导出时的CREATE SERVER,会执行失败,报解密失败的错误。这种场景下需要将CREATE SERVER中的password手动修改成明文密码进行配置。 syncsrv 仅用于跨集群互联互通,表示数据同步过程中使用到的GDS服务,设置方式与GDS外表的location属性相同。
  • 语法格式 为当前会话设置会话用户标识符和当前用户标识符。 1 SET [ SESSION | LOCAL ] SESSION AUTHORIZATION role_name PASSWORD 'password'; 重置会话和当前用户标识符为初始认证的用户名。 1 2 {SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT | RESET SESSION AUTHORIZATION};
  • 注意事项 一个数据库可以包含一个或多个已命名的Schema,Schema又包含表及其他数据库对象,包括数据类型、函数、操作符等。同一对象名可以在不同的Schema中使用而不会引起冲突。例如,Schema1和Schema2都可以包含一个名为mytable的表。 和数据库不同,Schema不是严格分离的。用户根据其对Schema的权限,可以访问所连接数据库的Schema中的对象。进行Schema权限管理首先需要对数据库的权限控制进行了解。 不能创建以PG_为前缀的Schema名,该类Schema为数据库系统预留的。 在当前数据库中创建用户时,系统会在当前数据库中为新用户创建一个同名Schema。 只要用户对当前数据库有CREATE权限,就可以创建Schema。 系统管理员在普通用户同名Schema下创建的对象,所有者为Schema的同名用户(非系统管理员)。 通过未修饰的表名(名字中只含有表名,没有“Schema名”)引用表时,系统会通过search_path(搜索路径)来判断该表是哪个Schema下的表。pg_temp和pg_catalog始终会作为搜索路径顺序中的前两位,无论二者是否出现在search_path中,或者出现在search_path中的任何位置。search_path(搜索路径)是一个Schema名列表,在其中找到的第一个表就是目标表,如果没有找到则报错。某个表即使存在,如果它的Schema不在search_path中,依然会查找失败,在搜索路径中的第一个Schema叫做“当前Schema”。它是搜索时查询的第一个Schema,同时在没有声明Schema名时,新创建的数据库对象会默认存放在该Schema下。
  • 语法格式 根据指定的名字创建模式: 1 2 CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ]; 根据用户名创建模式: 1 CREATE SCHEMA AUTHORIZATION user_name [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ];
  • 参数说明 schema_name 模式名字。 模式名不能和当前数据库里其他的模式重名。 模式的名字不可以“pg_”开头。 取值范围:字符串,要符合标识符的命名规范。 AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。 取值范围:已存在的用户名/角色名。 WITH PERM SPACE 'space_limit' 指定模式的永久表存储空间上限。当不指定space_limit时,则不限制。 取值范围:字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB~9007199254740991KB。 schema_element 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、GRANT子句。 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。
  • 示例 创建一个角色role1: 1 CREATE ROLE role1 IDENTIFIED BY '{Password}'; 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1: 1 2 3 4 CREATE SCHEMA AUTHORIZATION role1 CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;
  • 语法格式 1 2 3 4 ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER } target_role [, ...] ] [ IN SCHEMA schema_name [, ...] ] abbreviated_grant_or_revoke; 其中abbreviated_grant_or_revoke子句用于指定对哪些对象进行授权或回收权限。 1 2 3 4 5 6 7 8 grant_on_tables_clause | grant_on_functions_clause | grant_on_types_clause | grant_on_sequences_clause | revoke_on_tables_clause | revoke_on_functions_clause | revoke_on_types_clause | revoke_on_sequences_clause 其中grant_on_tables_clause子句用于对表授权。 1 2 3 4 5 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON TABLES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_functions_clause子句用于对函数授权。 1 2 3 4 GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_types_clause子句用于对类型授权。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_sequences_clause子句用于对序列授权。 1 2 3 4 5 GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中revoke_on_tables_clause子句用于回收表对象的权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON TABLES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_functions_clause子句用于回收函数的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_types_clause子句用于回收类型的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_sequences_clause子句用于回收序列的权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
  • 参数说明 target_role 已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户。 target_role必须有schema_name的CREATE权限。查看角色/用户是否具有schema的CREATE权限可使用has_schema_privilege函数。 1 SELECT a.rolname, n.nspname FROM pg_authid as a, pg_namespace as n WHERE has_schema_privilege(a.oid, n.oid, 'CREATE'); 取值范围:已有角色的名称。 schema_name 现有模式的名称。如果指定了模式名,那么之后在这个模式下面创建的所有对象默认的权限都会被修改。如果IN SCHEMA被省略,那么全局权限会被修改。 取值范围:现有模式的名称。 role_name 被授予或者取消权限角色的名称。 取值范围:已存在的角色名称。 如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROP OWNED BY来为角色脱离缺省的权限记录。
  • 示例 将创建在模式tpcds里的所有表(和视图)的SELECT权限授予每一个用户: 1 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT SELECT ON TABLES TO PUBLIC; 将tpcds下的所有表的插入权限授予用户jack: 1 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT INSERT ON TABLES TO jack; 撤销上述权限: 1 2 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE SELECT ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE INSERT ON TABLES FROM jack; 假设有两个用户test1、test2,如果想要test2用户对test1用户未来创建的表都有查询权限可以用如下操作: 首先,把test1的schema的权限赋权给test2用户: 1 GRANT usage, create ON SCHEMA test1 TO test2; 其次,把test1用户下的表的查询权限赋值给test2用户: 1 ALTER DEFAULT PRIVILEGES FOR USER test1 IN SCHEMA test1 GRANT SELECT ON tables TO test2; 然后,test1用户创建表: 1 2 SET ROLE test1 password '{Password}'; CREATE TABLE test3( a int, b int); 最后,用test2用户去查询: 1 2 3 4 5 SET ROLE test2 password '{Password}'; SELECT * FROM test1.test3; a | b ---+--- (0 rows)
  • 注意事项 当前会话的用户必须是指定的rolename角色的成员,但系统管理员可以选择任何角色。 使用SET ROLE命令,可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则自动拥有可以SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。
  • 注意事项 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 不支持PREPARE。 不支持重分布过程中MERGE INTO。 不支持对包含触发器的目标表执行MERGE INTO。 对roundrobin表执行MERGE INTO时,推荐关闭GUC参数allow_concurrent_tuple_update,否则会不支持部分MERGE INTO语句。
  • 示例 创建目标表products和源表newproducts,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); INSERT INTO products VALUES (1600, 'play gym', 'toys'); INSERT INTO products VALUES (1601, 'lamaze', 'toys'); INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); 进行MERGE INTO操作: 1 2 3 4 5 6 7 MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; 查询更新后的结果: 1 2 3 4 5 6 7 8 9 10 SELECT * FROM products ORDER BY product_id; product_id | product_name | category ------------+----------------+----------- 1501 | vivitar 35mm | electrncs 1502 | olympus camera | electrncs 1600 | play gym | toys 1601 | lamaze | toys 1666 | harry potter | toys 1700 | wait interface | books (6 rows) 删除表: 1 2 DROP TABLE products; DROP TABLE newproducts;
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 MERGE INTO table_name [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ [ AS ] alias ] ON ( condition ) [ WHEN MATCHED THEN UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ];
  • 参数说明 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。
  • 检查账户是否欠费 登录华为云费用中心。 在“总览”页面查看可用额度。 若账户处于欠款状态,则请先单击“充值”完成充值,或者购买点播CDN流量套餐包。 在“资源包”页面,查看转码套餐包是否有余额。 若账户处于欠款状态,但转码套餐仍有余额,可能是使用的转码模板是与购买的转码套餐包不一致,需要直接从账户余额扣费,从而导致欠费。建议先在欠费核销,然后使用与购买套餐包规格一致的转码模板进行转码。 重新登录视频点播控制台,在左侧导航树中选择“音视频管理”,勾选音视频文件,重新进行转码。
  • 查看关键操作列表 通过云审计服务,您可以记录与API网关相关的操作事件,便于日后的查询、审计和回溯。 表1 云审计服务支持的API Gateway操作列表 操作名称 资源类型 事件名称 创建API分组 ApiGroup createApiGroup 修改API分组 ApiGroup updateApiGroup 删除API分组 ApiGroup deleteApiGroup 校验API分组名称是否存在 Swagger CheckApiGroups 创建环境 Environment createEnvironment 修改环境 Environment updateEnvironment 删除环境 Environment deleteEnvironment 新建变量 EnvVariable CreateEnvironmentVariable 删除变量 EnvVariable DeleteEnvironmentVariable 修改变量 EnvVariable UpdateEnvironmentVariable 创建流控策略 Throttle CreateRequestThrottlingPolicy 修改流控策略 Throttle UpdateRequestThrottlingPolicy 删除流控策略 Throttle DeleteRequestThrottlingPolicy 创建API Api CreateApi 修改API Api UpdateApi 删除API Api DeleteApi 发布或下线API Api CreateOrDeletePublishRecordForApi 校验API定义 Api CheckApis 调试API Api DebugApi 批量发布/下线API Api BatchPublishOrOfflineApi 切换API版本 Api ChangeApiVersion 根据版本号下线API Api DeleteApiByVersionId 创建签名密钥 Signature CreateSignatureKey 修改签名密钥 Signature UpdateSignatureKey 删除签名密钥 Signature DeleteSignatureKey 绑定签名密钥 SignatureBinding AssociateSignatureKey 解除API与签名密钥的绑定关系 SignatureBinding DisassociateSignatureKey 绑定流控策略 ThrottleBinding AssociateRequestThrottlingPolicy 解除API与流控策略的绑定关系 ThrottleBinding DisassociateRequestThrottlingPolicy 批量解绑流控策略 ThrottleBinding BatchDisassociateThrottlingPolicy 创建特殊设置 ThrottleSpecial CreateSpecialThrottlingConfiguration 修改特殊流控 ThrottleSpecial UpdateSpecialThrottlingConfiguration 删除特殊流控 ThrottleSpecial DeleteSpecialThrottlingConfiguration APP授权 AppAuth CreateAuthorizingApps 解除授权 AppAuth CancelingAuthorization 绑定域名 ApiGroup AssociateDomain 绑定域名证书 ApiGroup AssociateCertificate 修改域名 ApiGroup UpdateDomain 解绑域名 ApiGroup DisassociateDomain 删除域名证书 ApiGroup DisassociateCertificate 创建ACL策略 Acl CreateAclStrategy 修改ACL策略 Acl UpdateAclStrategy 删除ACL策略 Acl DeleteAcl 批量删除ACL策略 Acl BatchDeleteAclV2 将API与ACL策略进行绑定 AclBinding CreateApiAclBinding 解除API与ACL策略的绑定 AclBinding DeleteApiAclBinding 批量解除API与ACL策略的绑定 AclBinding BatchDeleteApiAclBinding 创建自定义认证 Authorizer CreateCustomAuthorizer 修改自定义认证 Authorizer UpdateCustomAuthorizer 删除自定义认证 Authorizer DeleteCustomAuthorizer 导出API Swagger ExportApiDefinitions 导入API Swagger ImportApiDefinitions 创建VPC通道 Vpc CreateVpcChannel 更新VPC通道 Vpc UpdateVpcChannel 删除VPC通道 Vpc DeleteVpcChannel 添加或更新后端实例 Vpc AddingBackendInstances 更新后端实例 Vpc UpdateBackendInstances 删除后端实例 Vpc DeleteBackendInstance 批量修改后端服务器状态可用 Vpc BatchEnableMembers 批量修改后端服务器状态不可用 Vpc BatchDisableMembers 修改VPC通道健康检查 Vpc UpdateHealthCheck 添加或更新VPC通道后端服务器组 Vpc CreateMemberGroup 删除VPC通道后端服务器组 Vpc DeleteMemberGroup 更新VPC通道后端服务器组 Vpc UpdateMemberGroup 创建分组自定义响应 ApiGroup CreateGatewayResponse 修改分组自定义响应 ApiGroup UpdateGatewayResponse 删除分组自定义响应 ApiGroup DeleteGatewayResponse 修改分组下指定错误类型的自定义响应 ApiGroup UpdateGatewayResponseType 删除分组指定错误类型的自定义响应配置 ApiGroup DeleteGatewayResponseType 实例配置特性 Feature CreateFeatureV2 创建专享版实例(按需) Instance CreateInstance 更新专享版实例 Instance UpdateInstance 实例更新或绑定EIP Instance AddEip 实例解绑EIP Instance RemoveEip 开启实例公网出口 Instance AddEngressEip 更新实例出公网带宽 Instance UpdateEngressEip 关闭实例公网出口 Instance RemoveEngressEip 开启实例公网入口 Instance AddIngressEip 更新实例入公网带宽 Instance UpdateIngressEip 关闭实例公网入口 Instance RemoveIngressEip 删除专享版实例 Instance DeleteInstances 创建专享版实例(包周期) Instance CreateOrder 创建包周期规格变更订单 Instance CreatePrepayResize 按需规格变更 Instance CreatePostPayResizeOrder 接受或拒绝终端节点连接 vpc-endpoint AcceptOrRejectEndpointConnections 批量添加实例终端节点连接白名单 vpc-endpoint AddEndpointPermissions 批量删除实例终端节点连接白名单 vpc-endpoint DeleteEndpointPermissions 批量添加或删除单个实例的标签 Instance BatchCreateOrDeleteInstanceTags 导入微服务 Microservice ImportMicroservice 创建SSL证书 SslCertificate CreateCertificate 域名绑定SSL证书 ApiGroup BatchAssociateCerts 域名解绑SSL证书 ApiGroup BatchDisassociateCerts 删除SSL证书 SslCertificate DeleteCertificate 修改SSL证书 SslCertificate UpdateCertificate SSL证书绑定域名 Certificate BatchAssociateDomains SSL证书解绑域名 Certificate BatchDisassociateDomains 创建插件 Plugin CreatePlugin 修改插件 Plugin UpdatePlugin 删除插件 Plugin DeletePlugin 插件绑定API Plugin AttachApiToPlugin API绑定插件 Plugin AttachPluginToApi 解除绑定插件的API Plugin DetachApiFromPlugin 解除绑定API的插件 Plugin DetachPluginFromApi 创建APP App CreateAnApp 修改APP App UpdateApp 删除APP App DeleteAppV2 重置密钥 App ResettingAppSecret 校验APP App CheckApp 创建APP Code AppCode CreateAppCode 自动生成APP Code AppCode CreateAppCodeAuto 删除APP Code AppCode DeleteAppCode 设置APP的访问控制 AppAcl UpdateAppAcl 删除APP的访问控制 AppAcl DeleteAppAcl 创建凭据配额 AppQuota CreateAppQuota 修改凭据配额 AppQuota UpdateAppQuota 删除凭据配额 AppQuota DeleteAppQuota 凭据配额绑定凭据列表 AppQuotaBinding AssociateAppsForAppQuota 解除凭据配额和凭据的绑定 AppQuotaBinding DisassociateAppQuotaWithApp
  • 脚本配置示例 { "allow_origin": "*", "allow_methods": "GET,POST,PUT", "allow_headers": "Content-Type,Accept,Accept-Ranges,Cache-Control", "expose_headers": "X-Request-Id,X-Apig-Latency", "max_age": 172800, "allow_credentials": true }
  • 配置参数说明 表1 配置参数说明 参数 配置说明 allowed origins Access-Control-Allow-Origin响应头,指定允许访问API的外域URI,多个URI之间使用英文逗号隔开。 对于未携带身份凭证的请求,可以把参数值设置为“*”,表示允许来自所有域的访问请求。 allowed methods Access-Control-Allow-Methods响应头,指定允许使用的HTTP请求方法,多个请求方法之间使用英文逗号隔开。 allowed headers Access-Control-Allow-Headers响应头,指定XMLHttpRequest请求中允许携带的请求头字段,多个请求头之间使用英文逗号隔开。 其中,简单请求头Accept、Accept-Language、Content-Language、Content-Type(取值仅限为application/x-www-form-urlencoded、multipart/form-data、text/plain时)默认允许在请求中携带,无需在该参数中设置。 说明: 创建跨域资源共享插件时,默认不配置allowed headers,不允许跨域请求携带任何自定义请求头。 配置allowed headers为“*”,表示允许跨域请求携带所有请求头。 exposed headers Access-Control-Expose-Headers响应头,指定XMLHttpRequest请求响应中允许携带的响应头字段,多个响应头之间使用英文逗号隔开。 其中,基本响应头Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma默认允许在响应中携带,无需在该参数中设置。 说明: 创建跨域资源共享插件时,默认不配置exposed headers,不允许浏览器的JavaScript代码解析跨域访问获得的响应头内容(除XMLHttpRequest对象的getResponseHeader()方法获得的基本响应头,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma)。 配置exposed headers为“*”,表示允许浏览器的JavaScript代码解析跨域访问获得的所有响应头内容。 maximum age Access-Control-Max-Age响应头,指定本次预检请求的有效期,单位为秒。在有效期内,无需再次发出预检请求。 allowed credentials Access-Control-Allow-Credentials响应头,定XMLHttpRequest请求中是否允许携带Cookie。 开关开启表示允许。 开关关闭表示不允许。
  • 配置参数说明 表1 配置参数说明 参数 配置说明 策略生效范围 单个API生效 对单个API进行流量统计和控制。 API共享生效 对绑定了该插件的所有API进行总流量统计和控制。 时长 流量限制的时长。 与“API流量限制”配合使用,表示单位时间内的单个API请求次数上限。 与“用户流量限制”配合使用,表示单位时间内的单个用户请求次数上限。 与“应用流量限制”配合使用,表示单位时间内的单个APP请求次数上限。 与“源IP流量限制”配合使用,表示单位时间内的单个IP地址请求次数上限。 API流量限制 单个API被调用次数上限。 与“时长”配合使用,表示单位时间内的单个API请求次数上限。 用户流量限制 单个用户调用API次数上限,如果API认证方式为IAM认证,用户流量根据项目ID来限制;如果API认证方式为APP认证,用户流量根据账号ID来限制。账号ID和项目ID请参考下文“特殊租户”配置说明。 不超过“API流量限制”。 与“时长”配合使用,表示单位时间内的单个用户请求次数上限。 如果主账号下有多个子用户访问API,按主账号累计的调用次数进行限制。 应用流量限制 单个应用调用API次数上限,仅适用于API的安全认证方式为APP认证时。 不超过“用户流量限制”。 与“时长”配合使用,表示单位时间内的单个应用请求次数上限。 源IP流量限制 单个IP地址调用API次数上限。 不超过“API流量限制”。 与“时长”配合使用,表示单位时间内的单个IP地址请求次数上限。 参数流控配置 参数流控配置开关。开启后,以参数维度进行流控限制。 定义参数 定义用于规则匹配的参数。 参数位置:用于规则匹配的参数位置。 path:API请求的URI,系统默认配置。 method:API请求方法,系统默认配置。 Header:HTTP头域的第一个值。 Query:QueryString的第一个值。 System:系统参数。 参数:用于判断与规则匹配中的参数值是否匹配。 定义规则 定义规则的匹配条件,以及API流量限制和时长。 单击“添加规则”,可添加多个规则。 规则匹配 单击,可添加多个条件表达式,选择“定义参数”中的参数名和判断条件,以及输入参数值。 =为等于 !=为不等于 pattern为正则表达式 enum为枚举值,多个参数值之间用英文逗号分隔 API流量限制 API调用次数的最大值。 时长 定义规则的流量控制时长,如果此处不配置时长,规则的流量控制时长以“策略基本信息”的时长为准。 例如,在“定义参数”中添加参数“Host”,参数位置选择“Header”;在“定义规则”中添加一条规则,匹配条件设置成“Host = www.abc.com”,API流量限制为10,时长为60s。表示在60s内,对于请求头域中Host参数等于“www.abc.com”的API,且API调用次数达到10,参数流控生效。 特殊流控配置 特殊流控配置开关。开启后,“基础流控”的用户流量限制/应用流量限制与“特殊流控”的特殊租户/特殊应用共同作用时,以特殊流控值为准。 特殊租户 租户ID为账号ID或项目ID。 绑定APP认证的API时,租户ID为项目ID,获取项目ID。 绑定华为IAM认证的API时,租户ID为账号ID,不支持细分到IAM用户维度,获取账号名和账号ID。 阈值为单位时间内,此租户访问API的最大值,不超过“基础流控”的API流量限制值。 特殊应用 选择已有应用,阈值为单位时间内,此应用访问API的最大值,不超过“基础流控”的API流量限制值。
  • 脚本配置示例 { "scope": "basic", "default_interval": 60, "default_time_unit": "second", "api_limit": 100, "app_limit": 50, "user_limit": 50, "ip_limit": 20, "specials": [ { "type": "app", "policies": [ { "key": "2e421d76dc6c4c75941511ccf654e368", "limit": 10 } ] }, { "type": "user", "policies": [ { "key": "878f1b87f71c40a7a15db0998f358bb9", "limit": 10 } ] } ], "parameters": [ { "type": "path", "name": "reqPath", "value": "reqPath" }, { "type": "method", "name": "method", "value": "method" }, { "type": "header", "name": "Host", "value": "Host" } ], "rules": [ { "match_regex": "[\"Host\",\"==\",\"www.abc.com\"]", "rule_name": "rule-jlce", "time_unit": "second", "interval": 0, "limit": 5 } ] }
  • 错误码 当调用API时,可能遇到下表中的错误码。如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 通过APIG接口管理API,发生错误时,产生的错误码请参考错误码。 使用APIG错误码时,请以错误码(如APIG.0101)为准,错误信息并非固定不变,有时会对错误信息进行优化修改。 表1 错误码 错误码 错误信息 HTTP状态码 语义 解决方案 APIG.0101 The API does not exist or has not been published in the environment. 404 API不存在或未发布到环境 检查调用API所使用的域名、请求方法、路径和创建的API是否一致;检查API是否发布,如果发布到非生产环境,检查请求X-Stage头是否为发布的环境名;检查调用API使用的域名是否已经绑定到API所在的分组 APIG.0101 The API does not exist. 404 API请求方法不存在 检查API请求方法是否与API定义的方法相同 APIG.0103 The backend does not exist. 500 无法找到后端 联系技术支持 APIG.0104 The plug-ins do not exist. 500 无法找到插件配置 联系技术支持 APIG.0105 The backend configurations do not exist. 500 无法找到后端配置 联系技术支持 APIG.0106 Orchestration error. 400 编排错误 检查API配置的前后端参数是否合理 APIG.0107 The custom lua script encountered an unexpected error 500 Lua脚本发生未知错误 联系技术支持 APIG.0201 API request error. 400 请求格式不合法 使用合法的请求 APIG.0201 Request entity too large. 413 请求body过大(大于12M) 减小请求body大小 APIG.0201 Request URI too large. 414 请求URI过大(大于32K) 减小请求URI大小 APIG.0201 Request headers too large. 494 请求头过大(单个请求头大于32K或所有请求头总长度大于128K) 减小请求头大小 APIG.0201 Backend unavailable. 502 后端不可用 检查API配置的后端地址是否可用 APIG.0201 Backend timeout. 504 后端超时 增大超时时间或缩小后端的处理时间 APIG.0201 An unexpected error occurred 500 内部错误 联系技术支持 APIG.0202 Backend unavailable 502 后端不可用 检查API配置的后端请求协议是否与后端服务请求协议一致 APIG.0203 Backend timeout 504 后端超时 增大超时时间或缩小后端的处理时间 APIG.0204 SSL protocol is not supported: TLSv1.1 400 SSL协议版本不支持 使用支持的SSL协议版本 APIG.0205 Verify client certificate failed 400 客户端证书校验失败 检查客户端证书是否正确 APIG.0301 Incorrect IAM authentication information. 401 IAM认证信息错误 检查token是否正确 APIG.0302 The IAM user is not authorized to access the API. 403 IAM用户不允许访问API 检查用户是否被黑白名单限制 APIG.0303 Incorrect app authentication information. 401 APP认证信息错误 检查请求的方法、路径、查询参数、请求体和签名使用的方法、路径、查询参数、请求体是否一致;检查客户端机器时间是否正确。请参考使用APP认证调用API检查签名代码的问题 APIG.0304 The app is not authorized to access the API. 403 APP不允许访问API 检查APP是否授权访问API APIG.0305 Incorrect authentication information. 401 认证信息错误 检查认证信息是否正确 APIG.0306 API access denied. 403 不允许访问API 检查是否授权访问API APIG.0307 The token must be updated. 401 token需要更新 重新从IAM获取token APIG.0308 The throttling threshold has been reached. 429 超出流控值限制 等待流控刷新后访问。如果触发调试域名的单日请求数上限,请绑定独立域名 APIG.0310 The project is unavailable. 403 project不可使用 使用其他project访问 APIG.0311 Incorrect debugging authentication information. 401 调试认证信息错误 联系技术支持 APIG.0312 Incorrect third-party authentication information,auth fail 401 第三方认证信息错误,认证失败 检查身份信息是否正确 APIG.0313 Incorrect third-party authentication information,identities error 401 第三方认证信息错误,身份错误 检查请求中身份信息与第三方认证插件中身份来源设置是否一致 APIG.0314 Incorrect third-party authentication information,access deny 403 第三方认证信息错误,访问拒绝 联系技术支持确认请求来源是否为业务请求,如果是,则提高第三方认证插件的防爆力拦截阈值以解决 APIG.0401 Unknown client IP address. 403 无法识别客户端IP地址 联系技术支持 APIG.0402 The IP address is not authorized to access the API. 403 IP地址不允许访问 检查IP地址是否被黑白名单限制 APIG.0404 Access to the backend IP address has been denied. 403 后端IP不允许访问 后端IP地址或后端域名对应的IP地址不允许访问 APIG.0405 The app is not accessed from a trusted IP address. 403 未从受信任的IP地址访问应用程序 检查源IP是否在访问控制策略中配置了允许或者拒绝 APIG.0501 The app quota has been used up. 405 APP已经超出配额 或云市场调用次数用完 购买APP配额 或重新购买云市场调用次数 APIG.0502 The app has been frozen. 405 APP被冻结 余额不足 APIG.0601 Internal server error. 500 内部错误 联系技术支持 APIG.0602 Bad request. 400 非法请求 检查请求是否合法 APIG.0605 Domain name resolution failed. 500 域名解析失败 检查域名拼写,以及域名是否绑定了正确的后端地址 APIG.0606 Failed to load the API configurations. 500 未加载API配置 联系技术支持 APIG.0607 The following protocol is supported: {xxx} 400 协议不被允许,允许的协议是xxx。 注意:xxx以实际响应中的内容为准。 改用支持的协议(HTTP/HTTPS)访问 APIG.0608 Failed to obtain the admin token. 500 无法获取管理账户 联系技术支持 APIG.0609 The VPC backend does not exist. 500 找不到负载后端 联系技术支持 APIG.0610 No backend available. 502 没有可连接的后端 检查所有后端是否可用,如调用信息与实际配置是否一致 APIG.0611 The backend port does not exist. 500 后端端口未找到 联系技术支持 APIG.0612 An API cannot call itself. 500 API调用自身 修改API后端配置,递归调用层数不能超过10层 APIG.0613 The IAM service is currently unavailable. 503 IAM服务暂时不可用 联系技术支持 APIG.0615 Incorrect third-party authentication VPC information 500 获取第三方鉴权负载通道节点失败 检查第三方认证的负载通道配置是否正确 APIG.0616 Incorrect third-party authentication request information 500 连接第三方鉴权服务失败 检查第三方认证服务是否正常 APIG.0617 Incorrect third-party authentication response information 500 获取第三方鉴权服务响应失败 检查第三方认证服务是否正常 APIG.0705 Backend signature calculation failed. 500 计算后端签名失败 联系技术支持 APIG.0802 The IAM user is forbidden in the currently selected region 403 该IAM用户在当前region中被禁用 联系技术支持 APIG.2102 PublicKey is null 400 签名密钥未找到 联系技术支持 APIG.2201 Appkey or SecretKey is invalid 400 Appkey或SecretKey不合法 检查请求的Appkey或SecretKey是否正确 APIG.2202 Refresh token is invalid 400 Refresh token不合法 检查Refresh token是否正确 APIG.2203 Access token is invalid 400 Access token不合法 检查Access token是否正确 APIG.2204 ContentType invalid 400 ContentType不合法 检查ContentType是否正确 APIG.2205 Auth parameter invalid 400 认证参数不合法 检查认证参数是否正确 APIG.2206 Auth method invalid 400 认证方法不合法 检查认证方法是否正确 APIG.2208 The length of through_data is out of range 400 through_data超长 through_data长度上限为300,根据实际情况调整through_data内容 APIG.2209 The value of grant_type is not in enum List 400 grant_type的值不合法 grant_type只支持client_credentials、refresh_token,根据实际情况修改 APIG.2210 Lack of grant_type 400 缺少授权类型 添加grant_type APIG.2211 Lack of client_id 400 缺少客户端ID 添加客户端ID APIG.2212 Lack of client_secret 400 缺少客户端密钥 添加客户端密钥 APIG.2213 Lack of refresh_token 400 缺少refresh token 联系技术支持 APIG.1001 Refresh token is expired 401 Refresh token过期 重新获取refresh token APIG.1002 Access token is expired 401 Access token过期 重新获取access token APIG.1003 App not match refresh token 401 App与refresh token不匹配 检查client_id是否正确 APIG.1004 App not exist 401 App不存在 检查access token是否正确 APIG.1009 AppKey or AppSecret is invalid 400 AppKey或AppSecret不合法 检查请求的AppKey或AppSecret是否正确 父主题: 调用已发布的API
共100000条