华为云用户手册

  • 查询指定SCHEMA下的表大小及表对应索引的大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 SELECT t.tablename, indexname, c.reltuples AS num_rows, pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size, pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size, CASE WHEN indisunique THEN 'Y' ELSE 'N' END AS UNIQUE, idx_scan AS number_of_scans, idx_tup_read AS tuples_read, idx_tup_fetch AS tuples_fetched FROM pg_tables t LEFT OUTER JOIN pg_class c ON t.tablename=c.relname LEFT OUTER JOIN ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x JOIN pg_class c ON c.oid = x.indrelid JOIN pg_class ipg ON ipg.oid = x.indexrelid JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid ) AS foo ON t.tablename = foo.ctablename WHERE t.schemaname='public' ORDER BY 1,2;
  • 快速查询全库中所有表占用空间大小 8.1.3及以上集群版本在大集群大数据量(表数量大于1000)场景下,如果进行全库表查询,建议优先使用pgxc_wlm_table_distribution_skewness视图,该视图可以查到全库内的各表空间使用情况以及数据倾斜分布情况。其中,total_size和avg_size的单位为字节(bytes)。 1 2 3 4 5 6 7 SELECT *, pg_size_pretty(total_size) as tableSize FROM pgxc_wlm_table_distribution_skewness ORDER BY total_size desc; schema_name | table_name | total_size | avg_size | max_percent | min_percent | skew_percent | tablesize --------------------+---------------------------------------------------+------------+-----------+-------------+-------------+--------------+----------- public | history_tbs_test_row_1 | 804347904 | 134057984 | 18.02 | 15.63 | 7.53 | 767 MB public | history_tbs_test_row_3 | 402096128 | 67016021 | 18.30 | 15.60 | 8.90 | 383 MB public | history_tbs_test_row_2 | 401743872 | 66957312 | 18.01 | 15.01 | 7.47 | 383 MB public | i_history_tbs_test_1 | 325263360 | 54210560 | 17.90 | 15.50 | 6.90 | 310 MB 查询结果显示history_tbs_test_row_1表占用空间最大,且数据有一定的倾斜。 视图pgxc_wlm_table_distribution_skewness需要打开GUC参数use_workload_manager和enable_perm_space才能进行查询,在低版本查询全库时建议使用table_distribution()函数,如果仅查询某一张表的大小,推荐使用table_distribution(schemaname text, tablename text)函数。 8.2.1及以上集群版本中,GaussDB(DWS)已支持pgxc_wlm_table_distribution_skewness视图,可直接查询。 在8.1.3集群版本中,可使用如下定义创建视图后再进行查询: 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 CREATE OR REPLACE VIEW pgxc_wlm_table_distribution_skewness AS WITH skew AS ( SELECT schemaname, tablename, pg_catalog.sum(dnsize) AS totalsize, pg_catalog.avg(dnsize) AS avgsize, pg_catalog.max(dnsize) AS maxsize, pg_catalog.min(dnsize) AS minsize, (maxsize - avgsize) * 100 AS skewsize FROM pg_catalog.gs_table_distribution() GROUP BY schemaname, tablename ) SELECT schemaname AS schema_name, tablename AS table_name, totalsize AS total_size, avgsize::numeric(1000) AS avg_size, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (maxsize * 100 / totalsize)::numeric(5, 2) END ) AS max_percent, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (minsize * 100 / totalsize)::numeric(5, 2) END ) AS min_percent, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (skewsize / maxsize)::numeric(5, 2) END ) AS skew_percent FROM skew;
  • 查询数据库 使用gsql的\l元命令查看数据库系统的数据库列表。 1 2 3 4 5 6 7 8 9 10 \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+-----------+---------+-------+------------------- gaussdb | Ruby | SQL_ASCII | C | C | template0 | Ruby | SQL_ASCII | C | C | =c/Ruby + | | | | | Ruby=CTc/Ruby template1 | Ruby | SQL_ASCII | C | C | =c/Ruby + | | | | | Ruby=CTc/Ruby (3 rows) 如果用户在数据库安装的时候没有指定LC_COLLATE、LC_CTYPE参数,则LC_COLLATE、LC_CTYPE参数的默认值为C。 如果用户在创建数据库时没有指定LC_COLLATE、LC_CTYPE参数,则默认使用模板数据库的排序顺序及字符分类。 详细内容可参见CREATE DATABASE参数说明。 通过系统表pg_database查询数据库列表。 1 2 3 4 5 6 7 SELECT datname FROM pg_database; datname ----------- template1 template0 gaussdb (3 rows)
  • 查询表信息 使用系统表pg_tables查询数据库所有表的信息。 1 SELECT * FROM pg_tables; 使用gsql的\d+命令查询表结构。 示例:先创建表customer_t1并插入数据。 1 2 3 4 5 6 7 8 9 CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ) with (orientation = column,compression=middle) distribute by hash (c_last_name); 1 2 3 4 INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (6885, 'map', 'Peter'), (4321, 'river', 'Lily'), (9527, 'world', 'James'); 查询表结构。(若建表时不指定schema,则表的默认schema为public) 1 2 3 4 5 6 7 8 9 10 11 12 \d+ customer_t1; Table "public.customer_t1" Column | Type | Modifiers | Storage | Stats target | Description ---------------+--------------+-----------+----------+--------------+------------- c_customer_sk | integer | | plain | | c_customer_id | character(5) | | extended | | c_first_name | character(6) | | extended | | c_last_name | character(8) | | extended | | Has OIDs: no Distribute By: HASH(c_last_name) Location Nodes: ALL DATANODES Options: orientation=column, compression=middle, colversion=2.0, enable_delta=false 此处的Options在不同版本会有差异,对实际业务没有影响,仅作参考,实际以用户当前版本查询为准。 使用函数pg_get_tabledef查询表定义。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT * FROM PG_GET_TABLEDEF('customer_t1'); pg_get_tabledef ----------------------------------------------------------------------------------- SET search_path = tpchobs; + CREATE TABLE customer_t1 ( + c_customer_sk integer, + c_customer_id character(5), + c_first_name character(6), + c_last_name character(8) + ) + WITH (orientation=column, compression=middle, colversion=2.0, enable_delta=false)+ DISTRIBUTE BY HASH(c_last_name) + TO GROUP group_version1; (1 row) 执行如下命令查询表customer_t1的所有数据。 1 2 3 4 5 6 7 SELECT * FROM customer_t1; c_customer_sk | c_customer_id | c_first_name | c_last_name ---------------+---------------+--------------+------------- 6885 | map | Peter | 4321 | river | Lily | 9527 | world | James | (3 rows) 使用SELECT查询表customer_t1中某一字段的所有数据。 1 2 3 4 5 6 7 SELECT c_customer_sk FROM customer_t1; c_customer_sk --------------- 6885 4321 9527 (3 rows) 查询表是否做过表分析,执行如下命令会返回每个表最近一次做analyze的时间,没有返回时间的则表示没有做过analyze。 1 SELECT pg_stat_get_last_analyze_time(oid),relname FROM pg_class where relkind='r'; 查询public下的表做表分析的时间: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT pg_stat_get_last_analyze_time(c.oid),c.relname FROM pg_class c LEFT JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relkind='r' AND n.nspname='public'; pg_stat_get_last_analyze_time | relname -------------------------------+---------------------- 2022-05-17 07:48:26.923782+00 | warehouse_t19 2022-05-17 07:48:26.964512+00 | emp 2022-05-17 07:48:27.016709+00 | test_trigger_src_tbl 2022-05-17 07:48:27.045385+00 | customer 2022-05-17 07:48:27.062486+00 | warehouse_t1 2022-05-17 07:48:27.114884+00 | customer_t1 2022-05-17 07:48:27.172256+00 | product_info_input 2022-05-17 07:48:27.197014+00 | tt1 2022-05-17 07:48:27.212906+00 | timezone_test (9 rows) 快速查到一张表的列信息,information_schema下的视图在数据库中对象较多时返回结果很慢,可以通过以下sql快速查询到一张或几张表的列信息: 1 SELECT /*+ nestloop(a c)*/ c.column_name, c.data_type, c.ordinal_position, pgd.description, pp.partkey, c.is_nullable, c.column_default, c.character_maximum_length, c.numeric_precision, c.numeric_scale, c.datetime_precision, c.interval_type, c.udt_name from information_schema.columns as c left join pg_namespace sp on sp.nspname = c.table_schema left join pg_class cla on cla.relname = c.table_name and cla.relnamespace = sp.oid left join pg_catalog.pg_partition pp on (pp.parentid = cla.oid and pp.parttype = 'r') left join pg_catalog.pg_description pgd on (pgd.objoid=cla.oid and pgd.objsubid = c.ordinal_position)where c.table_name in ('tablename') and c.table_schema = 'public'; 例如,快速查询表customer_t1的列信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT /*+ nestloop(a c)*/ c.column_name, c.data_type, c.ordinal_position, pgd.description, pp.partkey, c.is_nullable, c.column_default, c.character_maximum_length, c.numeric_precision, c.numeric_scale, c.datetime_precision, c.interval_type, c.udt_name from information_schema.columns as c left join pg_namespace sp on sp.nspname = c.table_schema left join pg_class cla on cla.relname = c.table_name and cla.relnamespace = sp.oid left join pg_catalog.pg_partition pp on (pp.parentid = cla.oid and pp.parttype = 'r') left join pg_catalog.pg_description pgd on (pgd.objoid=cla.oid and pgd.objsubid = c.ordinal_position) where c.table_name in ('customer_t1') and c.table_schema = 'public'; column_name | data_type | ordinal_position | description | partkey | is_nullable | column_default | character_maximum_length | numeric_precision | numeric_scale | datetime_precision | interval_type | udt_name ---------------+-----------+------------------+-------------+---------+-------------+----------------+--------------------------+-------------------+------------- --+--------------------+---------------+---------- c_last_name | character | 4 | | | YES | | 8 | | | | | bpchar c_first_name | character | 3 | | | YES | | 6 | | | | | bpchar c_customer_id | character | 2 | | | YES | | 5 | | | | | bpchar c_customer_sk | integer | 1 | | | YES | | | 32 | 0 | | | int4 (4 rows) 通过查询审计日志获取表定义。 使用函数pgxc_query_audit可以查询所有CN节点的审计日志,其语法为: 1 pgxc_query_audit(timestamptz startime,timestamptz endtime) 查询审计多个对象名的记录: 1 2 SET audit_object_name_format TO 'all'; SELECT object_name,result,operation_type,command_text FROM pgxc_query_audit('2022-08-26 8:00:00','2022-08-26 22:55:00') where command_text like '%student%';
  • 大小写不敏感排序规则支持 从集群8.1.3版本开始,GaussDB(DWS)增加内置排序规则case_insensitive,即对字符类型的大小写不敏感行为(如排序、比较、哈希)。 约束条件: 支持字符类型:char/character/nchar、varchar/character varying/varchar2/nvarchar2/clob/text。 不支持字符类型:“char”和name。 不支持的编码:PG_EUC_JIS_2004、PG_MULE_INTERNAL、PG_LATIN10、PG_WIN874。 不支持CREATE DATABASE时指定到LC_COLLATE。 不支持正则表达式。 不支持字符类型的record比较(如record_eq)。 不支持时序表。 不支持倾斜优化。 不支持RoughCheck优化。
  • 概述 一种可排序数据类型的每一种表达式都有一个排序规则(系统内部的可排序数据类型可以是text、varchar和char等字符类型。用户定义的基础类型也可以被标记为可排序的,并且在一种可排序数据类型上的域也是可排序的)。如果该表达式是一个列引用,该表达式的排序规则就是列所定义的排序规则。如果该表达式是一个常量,排序规则就是该常量数据类型的默认排序规则。更复杂表达式的排序规则根据其输入的排序规则得来。
  • 示例 语句中显示指定COLLATE子句。 1 2 3 4 5 SELECT 'a' = 'A', 'a' = 'A' COLLATE case_insensitive; ?column? | ?column? ----------+---------- f | t (1 row) 建表时指定列属性为case_insensitive。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE t1 (a text collate case_insensitive); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE \d t1 Table "public.t1" Column | Type | Modifiers --------+------+-------------------------- a | text | collate case_insensitive INSERT INTO t1 values('a'),('A'),('b'),('B'); INSERT 0 4 建表时指定,查询时无需指定。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT a, a='a' FROM t1; a | ?column? ---+---------- A | t B | f a | t b | f (4 rows) SELECT a, count(1) FROM t1 GROUP BY a; a | count ---+------- a | 2 B | 2 (2 rows) CASE表达式,以WHEN子句中的COLLATE设置为准。 1 2 3 4 5 6 7 8 SELECT a,case a when 'a' collate case_insensitive then 'case1' when 'b' collate "C" then 'case2' else 'case3' end FROM t1; a | case ---+------- A | case1 B | case3 a | case1 b | case2 (4 rows) 跨子查询隐式派生。 1 2 3 4 5 6 7 8 9 SELECT * FROM (SELECT a collate "C" from t1) WHERE a in ('a','b'); a --- a b (2 rows) SELECT * FROM t1,(SELECT a collate "C" from t1) t2 WHERE t1.a=t2.a; ERROR: could not determine which collation to use for string hashing HINT: Use the COLLATE clause to set the collation explicitly. 由于collate case_insensitive为不敏感排序,结果集不确定,再使用敏感排序筛选,会有结果集不稳定的问题,因此语句中避免出现敏感排序和不敏感排序混用。 使用collate case_insensitive指定字符类型为大小写不敏感后,性能较使用前会有所下降,因此性能敏感场景需谨慎评估后使用。
  • 排序规则组合原则 当表达式的collation未指定时,则认为是默认的排序规则default,它表示数据库的区域设置。表达式的collation也可能是不确定的,此时,排序操作和其他不确定的排序规则的操作就会失败。 对于函数或操作符调用,其排序规则将通过检查所有参数的collation来决定。如果该函数或操作符调用的结果是一种可排序的数据类型,若有外层表达式要用到排序规则,那么该外层的表达式将继承对应函数和操作符所调用结果集的排序规则。 表达式的排序规则派生可以是显式或隐式。该区别会影响多个不同的排序规则出现在同一个表达式中时如何对collation进行组合。当执行语句使用COLLATE子句时,将发生显式派生,否则为隐式派生。当多个排序规则组合时,规则如下: 如果输入表达式中存在显式COLLATE派生,则在输入表达式之间的所有显式派生的COLLATE必须相同,否则将产生冲突错误。如果存在显式COLLATE,那它就是排序规则组合的结果。 如果不存在显式COLLATE,那所有输入表达式必须具有相同的隐式COLLATE或默认COLLATE。如果存在非默认COLLATE,那它就是排序规则组合的结果。否则,结果是默认COLLATE。 如果在输入表达式之间存在多个冲突的非默认COLLATE,则组合被认为是具有不确定排序规则,这并非一种错误。如果被调用的函数或表达式需要用到排序规则,运行时将产生排序规则未知的错误。 CASE表达式中,比较行为使用的规则以WHEN子句中的COLLATE设置为准。 显示COLLATE的派生仅在当前查询(CTE或SUBQUERY)中生效,查询外则降为隐式派生。
  • 多表查询中on条件和where条件的区别 从上面各种连接语法中可见,除自然连接和交叉连接外,其他都需要有on条件(using在查询解析过程中会被转为on条件)来限制两表连接的结果。通常在查询的语句中也都会有where条件限制查询结果。这里说的on连接条件和where过滤条件是指不含可以下推到表上的过滤条件。on和where的区别是: on条件是两表连接的约束条件。 where是对两表连接后产生的结果集再次进行过滤。 简单总结就是:on条件优先于where条件,在两表进行连接时被应用;生成两表连接结果集后,再应用where条件。
  • 连接类型介绍 通过SQL完成各种复杂的查询,多表之间的连接是必不可少的。连接分为:内连接和外连接两大类,每大类中还可进行细分。 内连接:标准内连接(INNER JOIN),交叉连接(CROSS JOIN)和自然连接(NATURAL JOIN)。 外连接:左外连接(LEFT OUTER JOIN),右外连接(RIGHT OUTER JOIN)和全外连接(FULL JOIN)。 为了能更好的说明各种连接之间的区别,下面通过具体示例进行详细的阐述。 创建示例表student和math_score,并插入数据,设置enable_fast_query_shipping为off(默认为on)即查询优化器使用分布式框架;参数explain_perf_mode为pretty(默认值为pretty)指定explain的显示格式。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE student( id INTEGER, name varchar(50) ); CREATE TABLE math_score( id INTEGER, score INTEGER ); INSERT INTO student VALUES(1, 'Tom'); INSERT INTO student VALUES(2, 'Lily'); INSERT INTO student VALUES(3, 'Tina'); INSERT INTO student VALUES(4, 'Perry'); INSERT INTO math_score VALUES(1, 80); INSERT INTO math_score VALUES(2, 75); INSERT INTO math_score VALUES(4, 95); INSERT INTO math_score VALUES(6, NULL); SET enable_fast_query_shipping = off; SET explain_perf_mode = pretty;
  • 示例 语句中显示指定COLLATE子句。 1 2 3 4 5 SELECT 'a' = 'A', 'a' = 'A' COLLATE case_insensitive; ?column? | ?column? ----------+---------- f | t (1 row) 建表时指定列属性为case_insensitive。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE t1 (a text collate case_insensitive); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE \d t1 Table "public.t1" Column | Type | Modifiers --------+------+-------------------------- a | text | collate case_insensitive INSERT INTO t1 values('a'),('A'),('b'),('B'); INSERT 0 4 建表时指定,查询时无需指定。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT a, a='a' FROM t1; a | ?column? ---+---------- A | t B | f a | t b | f (4 rows) SELECT a, count(1) FROM t1 GROUP BY a; a | count ---+------- a | 2 B | 2 (2 rows) CASE表达式,以WHEN子句中的COLLATE设置为准。 1 2 3 4 5 6 7 8 SELECT a,case a when 'a' collate case_insensitive then 'case1' when 'b' collate "C" then 'case2' else 'case3' end FROM t1; a | case ---+------- A | case1 B | case3 a | case1 b | case2 (4 rows) 跨子查询隐式派生。 1 2 3 4 5 6 7 8 9 SELECT * FROM (SELECT a collate "C" from t1) WHERE a in ('a','b'); a --- a b (2 rows) SELECT * FROM t1,(SELECT a collate "C" from t1) t2 WHERE t1.a=t2.a; ERROR: could not determine which collation to use for string hashing HINT: Use the COLLATE clause to set the collation explicitly. 由于collate case_insensitive为不敏感排序,结果集不确定,再使用敏感排序筛选,会有结果集不稳定的问题,因此语句中避免出现敏感排序和不敏感排序混用。 使用collate case_insensitive指定字符类型为大小写不敏感后,性能较使用前会有所下降,因此性能敏感场景需谨慎评估后使用。
  • 排序规则组合原则 当表达式的collation未指定时,则认为是默认的排序规则default,它表示数据库的区域设置。表达式的collation也可能是不确定的,此时,排序操作和其他不确定的排序规则的操作就会失败。 对于函数或操作符调用,其排序规则将通过检查所有参数的collation来决定。如果该函数或操作符调用的结果是一种可排序的数据类型,若有外层表达式要用到排序规则,那么该外层的表达式将继承对应函数和操作符所调用结果集的排序规则。 表达式的排序规则派生可以是显式或隐式。该区别会影响多个不同的排序规则出现在同一个表达式中时如何对collation进行组合。当执行语句使用COLLATE子句时,将发生显式派生,否则为隐式派生。当多个排序规则组合时,规则如下: 如果输入表达式中存在显式COLLATE派生,则在输入表达式之间的所有显式派生的COLLATE必须相同,否则将产生冲突错误。如果存在显式COLLATE,那它就是排序规则组合的结果。 如果不存在显式COLLATE,那所有输入表达式必须具有相同的隐式COLLATE或默认COLLATE。如果存在非默认COLLATE,那它就是排序规则组合的结果。否则,结果是默认COLLATE。 如果在输入表达式之间存在多个冲突的非默认COLLATE,则组合被认为是具有不确定排序规则,这并非一种错误。如果被调用的函数或表达式需要用到排序规则,运行时将产生排序规则未知的错误。 CASE表达式中,比较行为使用的规则以WHEN子句中的COLLATE设置为准。 显示COLLATE的派生仅在当前查询(CTE或SUBQUERY)中生效,查询外则降为隐式派生。
  • 大小写不敏感排序规则支持 从集群8.1.3版本开始,GaussDB(DWS)增加内置排序规则case_insensitive,即对字符类型的大小写不敏感行为(如排序、比较、哈希)。 约束条件: 支持字符类型:char/character/nchar、varchar/character varying/varchar2/nvarchar2/clob/text。 不支持字符类型:“char”和name。 不支持的编码:PG_EUC_JIS_2004、PG_MULE_INTERNAL、PG_LATIN10、PG_WIN874。 不支持CREATE DATABASE时指定到LC_COLLATE。 不支持正则表达式。 不支持字符类型的record比较(如record_eq)。 不支持时序表。 不支持倾斜优化。 不支持RoughCheck优化。
  • 概述 一种可排序数据类型的每一种表达式都有一个排序规则(系统内部的可排序数据类型可以是text、varchar和char等字符类型。用户定义的基础类型也可以被标记为可排序的,并且在一种可排序数据类型上的域也是可排序的)。如果该表达式是一个列引用,该表达式的排序规则就是列所定义的排序规则。如果该表达式是一个常量,排序规则就是该常量数据类型的默认排序规则。更复杂表达式的排序规则根据其输入的排序规则得来。
  • 连接类型介绍 通过SQL完成各种复杂的查询,多表之间的连接是必不可少的。连接分为:内连接和外连接两大类,每大类中还可进行细分。 内连接:标准内连接(INNER JOIN),交叉连接(CROSS JOIN)和自然连接(NATURAL JOIN)。 外连接:左外连接(LEFT OUTER JOIN),右外连接(RIGHT OUTER JOIN)和全外连接(FULL JOIN)。 为了能更好的说明各种连接之间的区别,下面通过具体示例进行详细的阐述。 创建示例表student和math_score,并插入数据,设置enable_fast_query_shipping为off(默认为on)即查询优化器使用分布式框架;参数explain_perf_mode为pretty(默认值为pretty)指定explain的显示格式。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE student( id INTEGER, name varchar(50) ); CREATE TABLE math_score( id INTEGER, score INTEGER ); INSERT INTO student VALUES(1, 'Tom'); INSERT INTO student VALUES(2, 'Lily'); INSERT INTO student VALUES(3, 'Tina'); INSERT INTO student VALUES(4, 'Perry'); INSERT INTO math_score VALUES(1, 80); INSERT INTO math_score VALUES(2, 75); INSERT INTO math_score VALUES(4, 95); INSERT INTO math_score VALUES(6, NULL); SET enable_fast_query_shipping = off; SET explain_perf_mode = pretty;
  • 多表查询中on条件和where条件的区别 从上面各种连接语法中可见,除自然连接和交叉连接外,其他都需要有on条件(using在查询解析过程中会被转为on条件)来限制两表连接的结果。通常在查询的语句中也都会有where条件限制查询结果。这里说的on连接条件和where过滤条件是指不含可以下推到表上的过滤条件。on和where的区别是: on条件是两表连接的约束条件。 where是对两表连接后产生的结果集再次进行过滤。 简单总结就是:on条件优先于where条件,在两表进行连接时被应用;生成两表连接结果集后,再应用where条件。
  • 响应示例 { "status": "200", "message": "success", "i18n": null, "data": { "ruleInfo": null, "headId": null, "expandRule": { "idPrefix": "0807", "headerSequence": "0001", "stepSize": 1, "createNum": 1, "tailSequence": "0001", "idSuffix": "", "numberRules": "10", "characterSet": "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z", "deHeaderSequence": 1, "deTailSequence": 1 }, "traceKey": null, "status": 30, "genId": "1792828105460658176", "genCode": "GEN0005", "genName": "Part分类生成器", "genClassName": null, "siteId": "-1", "objectAttrCode": null, "objectAttrValue": null, "createNum": null, "idList": [ "08070001" ], "code": null, "message": "success", "seqLength": null, "lastIdValue": null, "idGroupValue": null, "idSegmentValue": null, "tenantId": "PDM", "dataClass": null, "barcode": null, "parseInfo": null, "objJson": null, "genLabelCode": null, "genClassCode": null, "iconId": "975cbf40-8eed-4287-92a1-5886737b24ed" } }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 genCode 是 String 生成器代码 objJson 否 JSONObject 编码生成器包含对象编码属性时使用,objJson里面的值是对象编码中定义的属性值,支持多个属性 "objJson": "{\"Category_Code\": \"0303\",\"Model_Number\": \"modelNumber\"}"
  • 区域和可用区/边缘可用区 华为云用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区购买桌面。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。
  • 桌面池 桌面池是一批同规格镜像桌面集合,它能为管理员提供该项目下一批桌面的统一管理和运维的能力。桌面池包含动态池、静态池两种类型。 动态池是指M:N的池类型的桌面组,该桌面池内的虚拟机与对应的虚拟机用户一直没有固定的分配绑定关系;虚拟机用户每次通过客户端登录该桌面池时,workspace会动态的从该桌面池中随机分配一台空闲的虚拟机给该用户使用。 静态池是指1:1的池类型的桌面组。该桌面池内的虚拟机与对应的虚拟机用户最初没有固定的分配绑定关系,当该池内某个虚拟机第一次登录使用时,这个虚拟机与用户的分配绑定关系就固定下来了,后续该用户登录该桌面组,都会分配同一台虚拟机供其使用的,此虚拟机不会再分配给其他用户使用。
  • 云桌面的计费方式 不同区域支持的计费类型可参考云桌面价格计算器,具体请以实际购买云桌面页面显示为准。 表5 云桌面计费方式 计费模式 计费方式 计费周期 包年/包月 先购买再使用,用户在购买时,系统会根据用户所选的套餐对用户云账户中的金额进行扣除。 计费周期以UTC+8时区的时间为准。计费周期的起点是资源开通的时间点(精确到秒),终点是指定使用时长后的第一个00:00:00。 按需计费 先使用后扣款,后台会依据用户在区间时间段内使用时长,对用户云账户中的金额进行扣除。 以整点小时为计费周期,计费周期以UTC+8时区的时间为准。使用过程中,系统在每个整点时间(如2:00:00,3:00:00)会自动出账单核算区间时间内使用时长所需费用。 订单到期后,提供7天的宽限期,宽限期内资源依然可用。 宽限期后,提供15天的保留期,保留期内资源不可用,但并未删除。 保留期后,如果您没有续费订单,资源将自动删除。
  • 云桌面套餐 云桌面支持基于X86架构和基于鲲鹏架构的桌面套餐,您可以通过本章节快速浏览在售的所有规格清单,具体套餐请参见云桌面价格详情请以实际购买页面为准。 企业版和尊享版云桌面使用非绑定CPU调度模式,vCPU会根据系统负载被随机分配到空闲的CPU超线程上,当主机负载较大时,可能由于不同桌面vCPU争抢物理CPU资源而导致桌面性能波动不稳定。 企业版办公型如表1所示 表1 企业版套餐 套餐类型 套餐ID vCPU 内存 CPU架构 企业办公型-2U4GB workspace.x86.enterprise.large2 2核 4GB X86计算 企业办公型-2U8GB workspace.x86.enterprise.large4 2核 8GB X86计算 企业办公型-4U8GB workspace.x86.enterprise.xlarge2 4核 8GB X86计算 企业办公型-4U16GB workspace.x86.enterprise.xlarge4 4核 16GB X86计算 企业办公型-8U16GB workspace.x86.enterprise.2xlarge2 8核 16GB X86计算 企业办公型-8U32GB workspace.x86.enterprise.2xlarge4 8核 32GB X86计算 尊享版办公型如表2所示 表2 尊享版套餐 套餐类型 套餐ID vCPU 内存 CPU架构 尊享办公型-2U4G workspace.x86.ultimate.large2 2核 4GB X86计算 尊享办公型-2U8G workspace.x86.ultimate.large4 2核 8GB X86计算 尊享办公型-4U8G workspace.x86.ultimate.xlarge2 4核 8GB X86计算 尊享办公型-4U16G workspace.x86.ultimate.xlarge4 4核 16GB X86计算 尊享办公型-8U16G workspace.x86.ultimate.2xlarge2 8核 16GB X86计算 尊享办公型-8U32G workspace.x86.ultimate.2xlarge4 8核 32GB X86计算 鲲鹏计算型如所表3示 表3 鲲鹏计算型套餐 套餐类型 套餐ID vCPU 内存 CPU架构 鲲鹏基础办公型-2U4G workspace.k.large2.uosv20pro 2核 4GB 鲲鹏计算 鲲鹏基础办公增强型-2U8G workspace.k.large4.uosv20pro 2核 8GB 鲲鹏计算 鲲鹏通用办公型-4U8G workspace.k.xlarge2.uosv20pro 4核 8GB 鲲鹏计算 鲲鹏通用办公增强型-4U16G workspace.k.xlarge4.uosv20pro 4核 16GB 鲲鹏计算 鲲鹏高级办公型-8U16G workspace.k.2xlarge2.uosv20pro 8核 16GB 鲲鹏计算 鲲鹏高级办公增强型-8U32G workspace.k.2xlarge4.uosv20pro 8核 32GB 鲲鹏计算 各区域上线的套餐可能不同,请以实际购买页面为准。
  • 计费规则: 按需购买的实例支持关机/休眠不计费,关机/休眠后的计费规则: 实例本身(vCPU,内存,镜像)不计费,其它所挂载的资源如云硬盘,公网IP或带宽则正常计费。 按需计费云桌面支持关机/休眠不计费,即关机/休眠期间,在保留云桌面的前提下,系统将自动回收计算资源(vCPU、内存)。此时,将不再收取计算资源相关费用,仅收取存储资源(系统盘和数据盘)费用,可以降低您的使用成本,再次启动时会重新申请vCPU和内存,在资源不足时会有启动失败的风险,您可以通过稍后启动或更改实例规格的方式来恢复。 按需计费的特殊实例不支持关机/休眠不计费。特殊实例关机/休眠后仍然正常收费,同时vCPU和内存等资源也会保留。 不支持关机不计费的特殊实例包括: 含本地盘的实例,如磁盘增强型实例、超高I/O型实例等。 公网/私网NAT网关根据您选择的公网NAT网关规格和使用时长计费。详细的价格说明请参考NAT网关价格计算器。 除特殊公共镜像,其他公共镜像为免费,如果公共镜像转为私有镜像,则会根据云市场价格收取镜像费用。 云桌面删除或者退订(具体操作请参考云桌面《用户指南》的“桌面退订”章节),桌面的弹性公网IP会自动解绑、弹性公网IP会继续保留并计费,请前往弹性公网IP页面手动删除。 应用中心中文件使用OBS存储时进行计费,详情参考 对象存储服务 OBS的计费说明。
  • 计费模式 云桌面的规格包括计算资源(vCPU 、内存)和存储资源(系统盘、数据盘)。您可以根据业务中接入用户规划及云桌面使用场景规划,来决定您购买云桌面实例规格、数量及区域分布,以便为您的用户提供最优质的云桌面服务。云桌面支持包年包月计费模式和按需计费模式供您灵活选择。 包年包月:华为云提供包月和包年的购买模式。这种购买方式相对于按需付费则能够提供更大的折扣,对于长期使用者,推荐该方式。包年/包月计费按照订单的购买周期来进行结算。 适用场景:适合稳定长期使用云桌面资源的场景,相对于按需付费则能够提供更大的折扣。 按需计费:按需申请云桌面资源使用,实例从“开通”开启计费到“删除”结束计费,按实际购买时长(精确到秒)计费即开即停,支持变更为包年/包月资源,具体详情参考云桌面《用户指南》的“桌面计费模式变更(按需转包周期)”章节。 适用场景:适合短期业务需求的场景使用,可按需开关机释放实例计算资源,节省成本。
  • 告警类型说明 告警在列表中总共有五种状态,实际上告警本身只有告警中和已解决两种状态,根据这两种状态在系统中不同的标记又细分为五种状态,具体告警类型如表2所示。 表2 告警类型说明 告警类型 告警说明 当前告警 告警进入系统后如果没有被屏蔽规则屏蔽就会进入该页签,表示当前仍然是告警中状态且未被清除和屏蔽的告警。 屏蔽告警 告警进入系统后被设置的屏蔽规则自动屏蔽或者人为在界面上手动单击屏蔽的告警。屏蔽的告警分为两种,一种是有具体屏蔽时间的,到了屏蔽时间结束后会作为一条新的告警再次出现在当前告警的列表中,一种是没有屏蔽时间的,将会被永久屏蔽。 历史告警 历史告警都是已解决的告警,让告警进入已解决的状态的方式有两种,一种是上报的告警已解决,这条告警就会被清除进入历史告警,或者是在界面上直接清除告警也会进入历史告警。 未确认已恢复告警 系统接收到已解决或自动清除的告警,非界面操作影响的告警。 归档告警 历史告警中,告警级别在严重和紧急的告警且是已解决状态的,每个小时会被定时任务扫描到转移至归档告警。
  • 查询告警参数说明 可以用不同参数对告警进行查询,参数说明如表3所示。 表3 查询告警参数说明 告警参数 参数说明 应用/服务 告警所属的自有服务,不选则默认展示用户拥有权限下的所有告警。 告警级别 告警上报时所带的level字段。 显示模式 显示模式分为三种,告警收敛,原始告警和仅收敛告警。 告警收敛:展示未参与收敛的告警与收敛的告警是默认的显示模式,当告警被收敛后,收敛告警的正文中会统计当前收敛的子告警的状态。单击告警收敛后可以操作和查看具体子告警。 原始告警:原始告警展示除了收敛告警外的所有告警,包括已经被收敛了的原始告警也会展示。 仅收敛告警:仅展示已经被收敛了的告警。 状态 支持对未确认、已确认、已通知、处理中和处理完成的告警进行查询。 语音呼叫状态 告警当前的语音呼叫的状态。 告警类型 告警上报时的category字段。 入库时间 告警进入系统的时间。 区域 告警涉及的区域。 告警单发 选择是否查看属于告警单发的告警。
  • 接入后验证 纳管实例完成后即表示已将数据库接入至AppStage,在实例列表中会显示已纳管的数据库实例,可根据以下内容验证是否接入成功。 在实例列表中查看数据库实例的运行状态、规格与华为云是否一致。 单击实例名称进入实例详情页面,查看实例详细信息是否准确。 在实例列表,单击数据库实例所在行“操作”列的“账号”,单击“治理账号”,在治理账号列表查看是否已创建治理账号。 包括数据查询账号(dbquery)、SQL变更账号(change) 和性能分析账号(monitor)。 纳管后用户无法再持有明文密码,如果需要紧急修改数据库时,可以通过在数据库实例详情页面申请账号,获取账号密码。
  • 录入华为公有云账号 进入运维中心工作台。 将鼠标悬停在右上角的账号,选择下拉列表中的“服务环境配置”,选择左侧导航栏的“账户列表”。 单击“录入账号”。 录入账号信息,具体参数如表1所示。 表1 账号信息参数 参数名称 参数说明 厂商 选择账号归属的云厂商。 华为公有云账号ID 使用华为云并购买资源时注册的账号的账号ID。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”,在“API凭证”页面查看。 华为公有云账号名称 使用华为云并购买资源时注册的账号的账号名。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”,在“API凭证”页面查看。 纳管方式 AK-SK:通过AKSK获取管理员IAM操作权限,该IAM账号所属用户组需要拥有对应的权限,不同接入资源所需的权限不同,具体如表2所示,授权操作请参见用户组授权。 接入CCE集群时,该集群还需要在华为云CCE控制台进行授权,具体操作如为CCE集群授权所示。 授权委托:将操作权限委托给AppStage,让AppStage以IAM身份使用其他云服务,代替IAM进行一些资源运维工作,具体操作请参见创建委托,其中委托的账号需要设置为AppStage平台账号“HIS_wiseEyes”。 说明: 在AppStage管理控制台订购页可根据提示完成服务委托授权,如果未授权或者资源管理账号和开通AppStage账号不一致,可以在账号管理中进行授权委托。 IAM用户ID 选择纳管方式为AK-SK时,显示此参数。在IAM中创建的用户的用户ID。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”,在“API凭证”页面查看。 IAM用户名 选择纳管方式为AK-SK时,显示此参数。在IAM中创建的用户的用户名。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”,在“API凭证”页面查看。 AK 选择纳管方式为AK-SK时,显示此参数。输入用户的华为云访问密钥ID。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”,在左侧导航栏单击“访问密钥”,在“访问密钥”页面查看AK。 SK 选择纳管方式为AK-SK时,显示此参数。输入用户的华为云访问密钥。 SK只能在第一次创建的时候下载,之后都不能通过管理台查询。 授权委托名称 选择纳管方式为授权委托时,显示此参数。输入用户在华为云创建委托的名称。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“统一身份认证”,在左侧导航栏单击“委托”,在委托列表查看。 授权委托ID 选择纳管方式为授权委托时,显示此参数。输入用户在华为云创建委托的ID。 获取方式:在华为云控制台,鼠标悬停在右上角的用户名,选择下拉列表中的“统一身份认证”,在左侧导航栏单击“委托”,在委托列表查看。 表2 权限说明 接入资源 服务 所需权限策略类型 所需权限 网络 弹性网络服务(ENS) 系统策略 VPC Administrator 网络管理员 VPCEndpoint Administrator VPC终端节点服务使您可以将VPC私密的连接到支持的服务 ELB FullAccess 弹性负载均衡服务所有权限 CES Administrator 云监控服务管理员 NAT FullAccess AT网关服务所有权限 Tenant Guest 云服务只读权限(除IAM权限) NAT Administrator NAT网关服务管理员 ELB ReadOnlyAccess 弹性负载均衡服务只读权限 ELB Administrator 弹性负载均衡服务ELB管理员 虚拟机 主机管理服务(VMS) 自定义策略 策略内容如下所示: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "bms:*:*", "deh:*:*", "ecs:*:*", "evs:*:*", "ims:*:*", "cce:*:*", "mrs:*:*", "bss:*:*", "vpc:*:*" ] } ] } CCE集群 弹性资源服务(ERS) 系统策略 CCE Administrator CCE集群及集群下所有资源的读写权限 SFS Administrator 弹性文件服务的操作权限 APM FullAccess 应用性能管理服务的所有执行权限 OBS Administrator 对象存储服务管理员 SWR Admin 容器镜像服务的管理员权限 ELB Administrator 弹性负载均衡服务管理员 Server Administrator 服务器管理员 Tenant Guest 云服务只读权限(除IAM权限) 数据库 数据库治理(WiseDBA) 系统策略 不同数据库类型所需权限不同,具有如下: RDS(for MySQL) RDS FullAccess 关系型数据库服务所有权限 GeminiDB Cassandra GeminiDB FullAccess 分布式多模NoSQL数据库服务所有权限 GaussDB(for openGauss)/GaussDB(for MySQL) GaussDB FullAccess 云数据库GaussDB服务的所有执行权限 必选权限,无论使用哪种数据库,在数据库接入时都需要以下权限: DRS FullAccess 数据复制服务所有权限 VPC ReadOnlyAccess 虚拟私有云的只读权限 CES告警 资源管理(RMS) 自定义策略 策略内容如下所示: { "Statement": [ { "Action": [ "rms:resources:list", "rms:resources:get" ], "Effect": "Allow" } ], "Version": "1.1" } 单击“确定”。
  • 常用监控图表使用场景 表格:适用于多维度字段的指标统计。如图1所示,可以展示各接口下的总数、成功数、失败数、成功率、时延等数据。 图1 表格 折线图:适用于各维度的指标统计趋势对比。如图2所示,可以展示今昨对比的请求量趋势,如图3所示,可以展示各机房的请求量趋势。 图2 昨今对比折线图 图3 机房对比折线图 柱状图:适用于维度字段按照升序或降序的指标统计。如图4所示,可以展示下载次数的Top20。 图4 柱状图 饼图:适用于各维度的指标统计分布占比。如图5所示,可以展示Top5的错误码分布。 图5 饼图 地图:适用于各区域(国家、省份、城市等)维度指标的统计。如图6所示,可以展示各省份的下载次数分布。 图6 地图
  • 更多操作 您还可以对WarRoom进行以下操作。 表2 WarRoom管理 操作名称 操作步骤 查看WarRoom 在WarRoom列表,单击待查看WarRoom所在行“操作”列的“查看”。 克隆WarRoom 在WarRoom列表,单击待克隆WarRoom所在行“操作”列的“克隆”。 再次发送WarRoom 在WarRoom列表,单击待发送WarRoom所在行“操作”列的“再次发送”。 查看WarRoom通知日志 在WarRoom列表,单击待查看日志的WarRoom所在行“操作”列的“日志”。
共100000条