华为云用户手册

  • 数组类型处理 GaussDB (DWS)支持基础数组类型的转换,只需要在创建函数时在数据类型后追加 [] 即可,例如: CREATE FUNCTION java_arrayLength(INTEGER[]) RETURNS INTEGER AS 'Example.getArrayLength' LANGUAGE JAVA; Java代码类似于: public class Example { public static int getArrayLength(Integer[] intArray) { return intArray.length; } } 那么下面的调用的语句后: SELECT java_arrayLength(ARRAY[1, 2, 3]); 得到预期结果应该如下所示: java_arrayLength --------------------- 3 (1 row)
  • 示例 使用PL/Java函数时,需要首先将Java方法的实现打包为jar包并且部署到数据库中,然后使用数据库管理员账号创建函数,考虑兼容性问题,请使用1.8.0_322版本的JRE进行编译。 编译jar包。 Java方法的实现和出包可以借助IDE来实现,以下是一个通过命令行来进行编译和出包的简单的示例,通过这个简单示例可以创建出一个包含单个方法的jar包文件。 首先,编写一个Example.java文件,在此文件中实现子字符串大写转换的方法,本例中类名为Example,方法名为upperString,内容如下: 1 2 3 4 5 6 7 public class Example { public static String upperString (String text, int beginIndex, int endIndex) { return text.substring(beginIndex, endIndex).toUpperCase(); } } 然后,创建manifest.txt清单文件,文件内容如下: 1 2 3 4 5 6 Manifest-Version: 1.0 Main-Class: Example Specification-Title: "Example" Specification-Version: "1.0" Created-By: 1.6.0_35-b10-428-11M3811 Build-Date: 08/14/2018 10:09 AM 其中,Manifest-Version定义了manifest文件的版本,Main-Class定义了jar文件的入口类,Specification-Title和Specification-Version属于包的扩展属性,Specification-Title定义了扩展规范的标题,Specification-Version定义了扩展规范的版本,Created-By声明了该文件的生成者,Build-Date声明了该文件构建日期。 最后,编译java文件并打包得到javaudf-example.jar 1 2 javac Example.java jar cfm javaudf-example.jar manifest.txt Example.class jar包的命名规则应符合JDK命名要求,如果含有非法字符,在部署或者使用函数时将出错。 部署jar包。 Jar包首先需要放置到OBS服务器中,放置方法具体请参见《 对象存储服务 控制台指南》的上传文件章节。接着创建访问密钥AK/SK,获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)章节。登录数据库运行gs_extend_library函数,将文件导入到GaussDB(DWS)中: 1 SELECT gs_extend_library('addjar', 'obs://bucket/path/javaudf-example.jar accesskey=access_key_value_to_be_replaced secretkey=secret_access_key_value_to_be_replaced region=region_name libraryname=example'); gs_extend_library函数如何使用请参见 管理jar包和文件。函数中的AK/SK值,请用户根据实际获取值替换。region_name请用户根据实际所在的区域名称替换。 使用PL/Java函数。 首先,使用拥有sysadmin权限的数据库用户(例如:dbadmin)登录数据库并创建java_upperstring函数如下: 1 2 3 4 CREATE FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER) RETURNS VARCHAR AS 'Example.upperString' LANGUAGE JAVA; 函数java_upperstring中定义的数据类型为GaussDB(DWS)的数据类型。该数据类型需要和步骤1中java定义的方法upperString中数据类型一一对应。GaussDB(DWS)与Java数据类型的对应关系,请参见表1。 AS子句用于指定该函数所调用的Java方法的类名和static方法名,格式为“类名.方法名”。该字段需要和步骤1中java定义的类名和方法名一致。 使用PL/Java函数时,LANGUAGE字段应指定为JAVA。 CREATE FUNCTION更多说明,请参见创建函数。 然后,执行java_upperstring函数: 1 SELECT java_upperstring('test', 0, 1); 得到预期结果为: 1 2 3 4 java_upperstring --------------------- T (1 row) 授权普通用户使用PL/Java函数。 创建普通用户,名称为udf_user。 1 CREATE USER udf_user PASSWORD 'password'; 授权普通用户udf_user对java_upperstring函数的使用权限。注意,此处需要把函数所在模式和函数的使用权限同时赋予给用户,用户才可以使用此函数。 1 2 GRANT ALL PRIVILEGES ON SCHEMA public TO udf_user; GRANT ALL PRIVILEGES ON FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER) TO udf_user; 以普通用户udf_user登录数据库。 1 SET SESSION SESSION AUTHORIZATION udf_user PASSWORD 'password'; 执行java_upperstring函数: 1 SELECT public.java_upperstring('test', 0, 1); 得到预期结果为: 1 2 3 4 java_upperstring --------------------- T (1 row) 删除函数。 如果不再使用该函数可以进行删除: 1 DROP FUNCTION java_upperstring; 卸载jar包。 使用gs_extend_library函数卸载jar包: 1 SELECT gs_extend_library('rmjar', 'libraryname=example');
  • 基本数据类型映射关系 表1 PL/Java默认数据类型映射关系 GaussDB(DWS) Java BOOLEAN boolean "char" byte bytea byte[] SMALLINT short INTEGER int BIGINT long FLOAT4 float FLOAT8 double CHAR java.lang.String VARCHAR java.lang.String TEXT java.lang.String name java.lang.String DATE java.sql.Timestamp TIME java.sql.Time (stored value treated as local time) TIMETZ java.sql.Time TIMESTAMP java.sql.Timestamp TIMESTAMPTZ java.sql.Timestamp
  • 重载函数 PL/Java支持重载函数,因此可以创建同名函数,或者调用Java代码中的重载方法。步骤如下: 创建重载函数 例如,在Java中可以实现两个方法名相同,输入参数类型不同的方法dummy(int) 和dummy(String) public class Example { public static int dummy(int value) { return value*2; } public static String dummy(String value) { return value; } } 并在GaussDB(DWS)中创建两个同名函数分别指定为上述两个方法: CREATE FUNCTION java_dummy(INTEGER) RETURNS INTEGER AS 'Example.dummy' LANGUAGE JAVA; CREATE FUNCTION java_dummy(VARCHAR) RETURNS VARCHAR AS 'Example.dummy' LANGUAGE JAVA; 调用重载函数 在调用重载函数时,GaussDB(DWS)会根据输入的参数类型去调用匹配该类型的Java方法。因此上述两个函数的调用结果如下所示: SELECT java_dummy(5); java_dummy ----------------- 10 (1 row) SELECT java_dummy('5'); java_dummy --------------- 5 (1 row) 需要注意的是,由于GaussDB(DWS)对数据类型存在隐式转换的情况,因此建议在调用重载函数时,指定输入参数的类型,例如: SELECT java_dummy(5::varchar); java_dummy ---------------- 5 (1 row) 此时会优先匹配所指定的参数类型,如果不存在指定参数类型的Java方法,则会对参数进行隐式转换匹配转换后的参数类型对应的Java方法。 SELECT java_dummy(5::INTEGER); java_dummy ----------------- 10 (1 row) DROP FUNCTION java_dummy(INTEGER); SELECT java_dummy(5::INTEGER); java_dummy ---------------- 5 (1 row) 隐式转换的数据类型包括: 可以默认转换为INTEGER类型的包括:SMALLINT 可以默认转换为BIGINT类型的包括:SMALLINT, INTEGER 可以默认转换为BOOL类型的包括:TINYINT, SMALLINT, INTEGER, BIGINT 可以默认转换为TEXT类型的包括:CHAR, NAME, BIGINT, INTEGER, SMALLINT, TINYINT, RAW, FLOAT4, FLOAT8, BPCHAR, VARCHAR, NVARCHAR2, DATE, TIMESTAMP, TIMESTAMPTZ, NUMERIC, SMALLDATETIME 可以默认转换为VARCHAR类型的包括:TEXT, CHAR, BIGINT, INTEGER, SMALLINT, TINYINT, RAW, FLOAT4, FLOAT8, BPCHAR, DATE, NVARCHAR2, TIMESTAMP, NUMERIC, SMALLDATETIME 删除重载函数 对于重载函数,删除时需要指定函数的参数类型,否则无法删除。 DROP FUNCTION java_dummy(INTEGER);
  • expected_computing_nodegroup 参数说明:标识选定的计算Node Group模式或目标计算Node Group。Node Group目前为内部用机制,用户无需设置。 共4种计算Node Group模式,用于关联操作和聚集操作时选定计算Node Group。在每一种模式中,优化器有针对性地选定几个候选计算Node Group,然后根据代价,从中为当前算子挑选更合适的计算Node Group。 参数类型:USERSET 取值范围:字符串 optimal:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前用户具有COMPUTE权限的所有Node Group包含的所有DN构成的Node Group。 query:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前查询涉及的所有基表所在Node Group包含的所有DN构成的Node Group。 bind:当前session用户是逻辑集群用户时,候选计算Node Group为当前用户关联的逻辑集群的Node Group;当session用户不是逻辑集群用户时,候选计算Node Group选取规则和参数设置为query时的规则一致。 Node Group名: enable_nodegroup_debug为off时:候选计算Node Group列表包含算子操作对象所在的Node Group和该指定的Node Group。 enable_nodegroup_debug为on时:候选计算Node Group为指定的Node Group。 默认值:bind
  • enable_value_redistribute 参数说明:控制是否开启生成value redistribute优化计划,8.2.0及以上集群版本中,该参数针对不带Partition by子句的rank、dense_rank、row_number是否生成value redistribute优化计划生效。 参数类型:USERSET 取值范围:布尔型 on表示支持使用value redistribute生成优化计划。 off表示不支持使用value redistribute生成优化计划。 默认值:on
  • volatile_shipping_version 参数说明:控制volatile函数下推执行的范围。该参数仅8.2.0及以上集群版本支持。 参数类型:USERSET 取值范围:0,1 取值为1时,扩展支持nextval、uuid_generate_v1、sys_guid、uuid函数出现在语句目标列时的完全下推。 取值为0时,支持random类函数的完全下推,nextval、uuid_generate_v1函数仅在INSERT含有简单查询语句的部分下推。 默认值:1
  • enable_mixedagg 参数说明:控制优化器对Mixed Agg聚集规划类型的使用。(该参数仅8.2.0及以上集群版本支持) 参数类型:USERSET 取值范围:布尔型 on表示使用,为符合条件的Grouping Sets语句(包括Rollup或Cube)生成Mixed Agg查询计划。 off表示不使用。 默认值:off 通常在大数量场景(单个DN表的数据量在100GB以上),采用Mixed Agg查询计划可以提升语句的执行性能。 不支持Mixed Agg的场景如下: GROUP BY子句里列的数据类型不支持哈希操作。 聚集函数中包含DISTINCT去重或ORDER BY排序。 使用GROUPING SETS子句时不包含空的分组。
  • best_agg_plan 参数说明:对于stream下的Agg操作,优化器会生成三种计划: hashagg+gather(redistribute)+hashagg。 redistribute+hashagg(+gather)。 hashagg+redistribute+hashagg(+gather)。 本参数用于控制优化器生成哪种hashagg的计划。 参数类型:USERSET 取值范围:0,1,2,3 取值为1时,强制生成第一种计划。 取值为2时,如果group by列可以重分布,强制生成第二种计划,否则生成第一种计划。 取值为3时,如果group by列可以重分布,强制生成第三种计划,否则生成第一种计划。 取值为0时,优化器会根据以上三种计划的估算cost选择最优的一种计划生成。 默认值:0
  • enable_nodegroup_debug 参数说明:控制优化器在多Node Group环境下,是否使用强制弹性计算。Node Group目前为内部用机制,用户无需设置。 该参数只在expected_computing_nodegroup被设置为具体Node Group时生效。 参数类型:USERSET 取值范围:布尔型 on表示强制将计算弹性到expected_computing_nodegroup所指定的Node Group进行计算。 off表示不强制使用某个Node Group进行计算。 默认值:off
  • qrw_inlist2join_optmode 参数说明:控制是否使用inlist-to-join查询重写。 参数类型:USERSET 取值范围:字符串 disable:关闭inlist2join查询重写。 cost_base:基于代价的inlist2join查询重写。 rule_base:基于规则的inlist2join查询重写,即强制使用inlist2join查询重写。 任意正整数:inlist2join查询重写阈值,即list内元素个数大于该阈值,进行inlist2join查询重写。 默认值:cost_base
  • setop_optmode 参数说明:控制不带ALL选项的集合操作(UNION/EXCEPT/INTERSECT)语句的各个查询分支语句是否执行去重操作。该参数仅8.2.0及以上集群版本支持。 参数类型:USERSET 取值范围:枚举型 disable:查询分支不执行去重操作。 force:强制查询分支执行去重操作。 cost:优化器在查询分支去重和不去重这两种执行方式中,选择代价比较小的执行方式。 默认值:disable 此参数配置仅在SQL语句的执行计划满足以下条件时生效: SQL语句中的UNION/EXCEPT/INTERSECT操作不带ALL选项。 执行集合操作的各个查询分支在进行集合操作前执行过数据重分布动作。
  • 简介 多租户管理框架下,用户关联资源池执行查询,用户执行查询所占用的资源将汇总至关联资源池上,通过资源池监控视图,用户可以直观的查询到所有资源池的实时资源使用情况,同时也可以通过资源池监控历史表查询资源池资源的历史使用情况。 资源池监控数据每5s更新一次,但是因为CN和DN时间差,实际监控数据更新时间可能会大于5s,正常不会超过10s。资源池监控数据每30s持久化一次,资源池监控和用户监控逻辑基本一致,因此共用GUC参数控制持久化和老化,使用GUC参数enable_user_metric_persistent控制是否进行资源池监控数据持久化,使用GUC参数user_metric_retention_time控制资源池监控数据老化。 资源池监控的资源包含:快慢车道作业运行和排队信息,CPU、内存以及逻辑IO资源监控信息。涉及的监控视图和历史表如下所示: 资源池实时运行信息监控视图(单CN):GS_RESPOOL_RUNTIME_INFO; 资源池实时运行信息监控视图(所有CN):PGXC_RESPOOL_RUNTIME_INFO; 资源池实时资源监控视图(单CN):GS_RESPOOL_RESOURCE_INFO; 资源池实时资源监控视图(所有CN):PGXC_RESPOOL_RESOURCE_INFO; 资源池历史资源监控表(单CN):GS_RESPOOL_RESOURCE_HISTORY; 资源池历史资源监控视图(所有CN):PGXC_RESPOOL_RESOURCE_HISTORY; 资源池监控可以同时监控快慢车道所有作业的CPU、IO和内存使用情况,不再受限于仅监控慢车道作业。 当前快车道作业内存和CPU不受控,在快车道运行作业占用资源较多情况下,可能出现已用资源大于资源限制的情况。 DN资源池监控视图中,IO、内存和CPU显示的是本DN上资源池资源使用和资源限制信息。 CN资源池监控视图中,IO、内存和CPU显示的是集群内所有DN资源池资源使用和资源限制的累积和。 DN每隔5s更新一次资源池监控信息,CN每隔5s从DN收集一次资源池监控信息,因为各实例单独更新/收集资源池监控信息,因此各实例监控信息更新时间可能不一致。 辅助线程中每隔30s自动调用持久化函数,持久化资源池监控数据,正常情况下不需要用户单独调用持久化函数持久化资源池监控数据。
  • 操作步骤 查询资源池的作业实时运行情况。 1 SELECT * FROM GS_RESPOOL_RUNTIME_INFO; 得到的结果视图如下: nodegroup | rpname | ref_count | fast_run | fast_wait | slow_run | slow_wait -----------+--------------+-----------+----------+-----------+----------+----------- vc1 | p2 | 10 | 0 | 0 | 0 | 0 vc2 | p3 | 10 | 5 | 5 | 0 | 0 vc2 | p4 | 0 | 0 | 0 | 0 | 0 vc1 | default_pool | 0 | 0 | 0 | 0 | 0 vc2 | default_pool | 0 | 0 | 0 | 0 | 0 vc1 | p1 | 20 | 5 | 5 | 3 | 7 (6 rows) 其中: ref_count为引用当前资源池信息的作业数,语句从进入管控到结束一直占用该计数; fast_run和slow_run为负载管理记账信息,只有管控(fast_limit/slow_limit大于0)时该值才有效; 该视图仅在CN上有效,持久化信息保存在GS_RESPOOL_RESOURCE_HISTORY中; 各字段说明详见GS_RESPOOL_RUNTIME_INFO。 查询资源池的资源限额和资源实时使用情况。 1 SELECT * FROM GS_RESPOOL_RESOURCE_INFO; 得到的结果视图如下: nodegroup | rpname | cgroup | ref_count | fast_run | fast_wait | fast_limit | slow_run | slow_wait | slow_limit | used_cpu | cpu_limit | used_mem | estimate_mem | mem_limit |read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed -----------+--------------+---------------------+-----------+----------+-----------+------------+----------+-----------+------------+----------+-----------+----------+--------------+-----------+-------------+--------------+-------------+--------------+------------+------------- vc1 | p2 | DefaultClass:Rush | 10 | 0 | 0 | -1 | 0 | 0 | 10 | 9.97 | 48 | 20 | 0 | 11555 | 8 | 2880 | 1 | 360 | 1 | 589 vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.98 | 48 | 11 | 0 | 11555 | 0 | 848 | 0 | 106 | 0 | 173 vc2 | p4 | DefaultClass:Rush | 0 | 0 | 0 | -1 | 0 | 0 | 10 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 vc1 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 vc2 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 vc1 | p1 | DefaultClass:Rush | 20 | 5 | 5 | 5 | 3 | 7 | 3 | 7.98 | 48 | 16 | 768 | 11555 | 8 | 2656 | 1 | 332 | 1 | 543 (6 rows) 该视图在CN和DN上均有效,DN上CPU、内存和IO为本DN资源消耗情况,CN上CPU、内存和IO为集群内所有DN上资源消耗的累加和; estimate_mem仅在动态负载管理情况下CN上有效,显示资源池估算内存记账情况; IO监控信息仅在enable_logical_io_statistics开启时才会记录; 各字段说明详见GS_RESPOOL_RESOURCE_INFO。 查询资源池的资源限额和资源历史使用情况。 1 SELECT * FROM GS_RESPOOL_RESOURCE_HISTORY ORDER BY timestamp DESC; 得到的结果视图如下: timestamp | nodegroup | rpname | cgroup | ref_count | fast_run | fast_wait | fast_limit | slow_run | slow_wait | slow_limit | used_cpu | cpu_limit | used_mem | estimate_mem | mem_limit | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed -------------------------------+--------------+--------------+---------------------+-----------+----------+-----------+------------+----------+-----------+------------+----------+-----------+----------+--------------+-----------+-------------+--------------+-------------+--------------+------------+------------- 2022-03-04 09:41:57.53739+08 | vc1 | p2 | DefaultClass:Rush | 10 | 0 | 0 | -1 | 0 | 0 | 10 | 9.97 | 48 | 20 | 0 | 11555 | 0 | 2320 | 0 | 290 | 0 | 474 2022-03-04 09:41:57.53739+08 | vc1 | p1 | DefaultClass:Rush | 20 | 5 | 5 | 5 | 3 | 7 | 3 | 7.98 | 48 | 16 | 768 | 11555 | 0 | 1896 | 0 | 237 | 0 | 387 2022-03-04 09:41:57.53739+08 | vc2 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc1 | default_pool | DefaultClass:Medium | 0 | 0 | 0 | -1 | 0 | 0 | -1 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc2 | p4 | DefaultClass:Rush | 0 | 0 | 0 | -1 | 0 | 0 | 10 | 0 | 48 | 0 | 0 | 11555 | 0 | 0 | 0 | 0 | 0 | 0 2022-03-04 09:41:57.53739+08 | vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.99 | 48 | 11 | 0 | 11555 | 0 | 880 | 0 | 110 | 0 | 180 2022-03-04 09:41:27.335234+08 | vc2 | p3 | DefaultClass:Rush | 10 | 5 | 5 | 5 | 0 | 0 | 10 | 4.98 | 48 | 11 | 0 | 11555 | 0 | 856 | 0 | 107 | 0 | 175 该监控信息来自资源池监控历史表,enable_user_metric_persistent开启时每30秒记录一次; 该表数据保存时间由GUC参数user_metric_retention_time控制; 各字段说明详见GS_RESPOOL_RESOURCE_HISTORY。
  • 背景信息 GDS支持在如下的操作系统中安装: 鲲鹏平台: Community Enterprise Operating System 7.6。 EulerOS 2.0 SP8。 Red Hat Enterprise Linux Server release 7.5。 中标麒麟7.5/7.6。 x86平台: SUSE Linux Enterprise Server 10 SP4 x86_64。 SUSE Linux Enterprise Server 11 SP1/SP2/SP3/SP4 x86_64。 SUSE Linux Enterprise Server 12 SP0/SP1/SP2/SP3/SP5 x86_64。 Red Hat Enterprise Linux Server release 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5 x86_64。 Community Enterprise Operating System 6.4/6.5/6.6/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4 x86_64。 EulerOS 2.5 x86_64。 GDS的版本需与集群版本保持一致(如:GDS V100R008C00版本与DWS 1.3.X版本配套),否则可能会出现导入导出失败或导入导出进程停止响应等情况。 因此请勿使用历史版本的GDS进行导入。数据库版本升级后,请按照操作步骤中的办法下载GaussDB(DWS)软件包解压缩自带的GDS进行安装配置和启动。在导入导出开始时,GaussDB(DWS)也会进行两端的版本一致性检测,不一致时会打屏显示报错信息并终止对应操作。 GDS的版本号的查看办法为:在GDS工具的解压目录下执行如下命令。 gds -V 数据库版本的查看办法为:连接数据库后,执行如下SQL命令查看。 1 SELECT version();
  • gds.conf参数说明 表1 gds.conf配置说明 属性 说明 取值范围 name 标识名。 - ip 监听ip地址。 IP需为合法IP地址。 IP的默认值:127.0.0.1 port 监听端口号。 取值范围:1024~65535,正整数。 默认值:8098。 data_dir 数据文件目录。 - err_dir 错误日志文件目录。 默认值:数据文件目录 log_file 日志文件路径。 - host 设置允许连接到GDS的主机IP地址(参数为CIDR格式,仅支持linux系统)。 - recursive 是否递归数据文件目录。 取值范围: true:递归 。 false:不递归。 默认值:false。 daemon 是否以DAEMON(后台)模式运行。 取值范围: true:以DAEMON模式运行。 false:不以DAEMON模式运行。 默认值:false。 parallel 导入工作线程并发数目。 取值范围:0~200,正整数。 默认值:8。
  • \copy命令 \copy命令格式以及说明参见表 1 \copy元命令说明。 表1 \copy元命令说明 语法 说明 \copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ binary ] [ oids ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ header ] [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ] ] 在任何gsql客户端登录数据库成功后,可以使用该命令进行数据的导入/导出。但是与SQL的COPY命令不同,该命令读取/写入的文件是本地文件,而非数据库服务器端文件;所以,要操作的文件的可访问性、权限等,都是受限于本地用户的权限。 说明: \COPY只适合小批量,格式良好的数据导入,容错能力较差。导入数据应优先选择GDS或COPY。
  • PG_STAT_SYS_TABLES PG_STAT_SYS_TABLES视图显示pg_catalog、information_schema模式的所有命名空间中系统表的统计信息。 表1 PG_STAT_SYS_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 表的模式名。 relname name 表名。 seq_scan bigint 在此表上表启动的顺序扫描的次数。 seq_tup_read bigint 顺序扫描抓取的有live数据行的数目。 idx_scan bigint 索引扫描的次数。 idx_tup_fetch bigint 索引扫描抓取的有live数据行的数目。 n_tup_ins bigint 插入的行数。 n_tup_upd bigint 更新的行数。 n_tup_del bigint 删除的行数。 n_tup_hot_upd bigint 热更新的行数(即不需要单独的索引更新)。 n_live_tup bigint live行估计数。 n_dead_tup bigint dead行估计数。 last_vacuum timestamp with time zone 最后一次手动vacuum时间(不计算VACUUM FULL)。 last_autovacuum timestamp with time zone 最后一次autovacuum时间。 last_analyze timestamp with time zone 最后一次analyze时间。 last_autoanalyze timestamp with time zone 最后一次autoanalyze时间。 vacuum_count bigint vacuum的次数(不计算VACUUM FULL)。 autovacuum_count bigint autovacuum的次数。 analyze_count bigint analyze的次数。 autoanalyze_count bigint autoanalyze的次数。 父主题: 系统视图
  • PG_RESOURCE_POOL PG_RESOURCE_POOL系统表提供了数据库资源池的信息。 表1 PG_RESOURCE_POOL字段 名称 类型 描述 respool_name name 资源池名称。 mem_percent integer 内存配置的百分比。 cpu_affinity bigint CPU绑定core的数值。 control_group name 资源池所在的control group名字。 active_statements integer 资源池上最大的并发数。 max_dop integer 最大并发度,保留字段。 memory_limit name 资源池最大的内存。 parentid oid 父资源池OID。 io_limits integer 保留字段,无实际意义。 io_priority text 保留字段,无实际意义。 is_foreign boolean 表示资源池是否用于逻辑集群之外的用户。如果为true,表示资源池用来控制不属于当前资源池的普通用户的资源。 short_acc boolean 资源池是否开启短查询加速,默认开启。 短查询加速开启,简单查询在快车道管控。 短查询加速关闭,简单查询在慢车道管控。 except_rule text 资源池关联的异常规则,支持关联多个异常规则,异常规则间用逗号分隔。 父主题: 系统表
  • log_truncate_on_rotation 参数说明:logging_collector设置为on时,log_truncate_on_rotation设置日志消息的写入方式。 参数类型:SIGHUP 取值范围: 布尔型 on表示GaussDB(DWS)以覆盖写入的方式写服务器日志消息。 off表示GaussDB(DWS)将日志消息附加到同名的现有日志文件上。 默认值:off 示例: 假设日志需要保留7天,每天生成一个日志文件,日志文件名设置为server_log.Mon、server_log.Tue等。第二周的周二生成的日志消息会覆盖写入到server_log.Tue。设置方法:将log_filename设置为server_log.%a ,log_truncate_on_rotation设置为on,log_rotation_age设置为1440,即日志有效时间为1天。
  • log_rotation_age 参数说明:logging_collector设置为on时,log_rotation_age决定创建一个新日志文件的时间间隔。当现在的时间减去上次创建一个服务器日志的时间超过了log_rotation_age的值时,将生成一个新的日志文件。 参数类型:SIGHUP 取值范围:整型,0 ~ 24d,单位为min,h,d。其中0表示关闭基于时间的新日志文件的创建。 默认值:1d
  • 应用示例 查询集群当前正在执行的语句,以及这些语句分别产生的wal日志的总量和平均速率、数据页总量和平均速率,以及这些信息各自DN上的分布情况。 1 2 3 4 5 6 7 8 9 10 SELECT * FROM PGXC_STAT_WAL; query_id | query_start | global_wal | global_avg_wal_speed | global_datapage | global_avg_datapage_speed | min_wal_node | min_wal | max_wal_node | max_wal | min_datapage_node | min_data_page | max_datapage_node | max_data_page | avg_wal_per_node | avg_datapage_per_node | query -------------------+-------------------------------+------------+----------------------+-----------------+---------------------------+--------------+----------+--------------+----------+-------------------+---------------+-------------------+---------------+------------------+- ----------------------+---------------------------------------------- 72620543991351767 | 2022-11-10 16:49:47.743291+08 | 7579052 | 419000 | 284057600 | 15740000 | datanode1 | 7579052 | datanode1 | 7579052 | datanode1 | 284057600 | datanode1 | 284057600 | 7579052 | 284057600 | insert into mpptest3 select * from mpptest3; 72620543991351781 | 2022-11-10 16:50:00.616697+08 | 55022176 | 10638000 | 0 | 0 | datanode1 | 55022176 | datanode1 | 55022176 | datanode1 | 0 | datanode1 | 0 | 55022176 | 0 | insert into mpptest1 select * from mpptest1; (2 rows)
  • 应用示例 查询指定函数的OID。例如,获取函数justify_days的OID为1295。 1 2 3 4 5 SELECT oid FROM pg_proc where proname ='justify_days'; oid ------ 1295 (1 row) 查询指定函数是否为聚集函数。例如,查询justify_days函数为非聚集函数。 1 2 3 4 5 SELECT proisagg FROM pg_proc where proname ='justify_days'; proisagg ---------- f (1 row)
  • 示例:通过本地文件导入导出数据 在使用JAVA语言基于GaussDB(DWS)进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持 CS V、TEXT等格式。 样例程序如下,执行时需要加载GaussDB(DWS) jdbc驱动。 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 //以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{ public static void main(String[] args) { String urls = new String("jdbc:postgresql://10.180.155.74:8000/gaussdb"); //数据库URL String username = new String("jack"); //用户名 String password = new String("********"); //密码 String tablename = new String("migration_table"); //定义表信息 String tablename1 = new String("migration_table_1"); //定义表信息 String driver = "org.postgresql.Driver"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(urls, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } // 将migration_table查询结果导出到本地文件d:/data.txt try { copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将d:/data.txt中的数据导入到migration_table_1中。 try { copyFromFile(conn, "d:/data.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 将migration_table_1中的数据导出到本地文件d:/data1.txt try { copyToFile(conn, "d:/data1.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 父主题: 基于JDBC开发
  • PG_EXT_STATS PG_EXT_STATS视图提供对存储在PG_STATISTIC_EXT表里面的扩展统计信息的访问。扩展统计信息目前包括多列统计信息。 表1 PG_EXT_STATS字段 名称 类型 引用 描述 schemaname name PG_NAMESPACE.nspname 包含表的模式名。 tablename name PG_CLASS.relname 表名。 attname int2vector PG_STATISTIC_EXT.stakey 统计信息扩展的多列信息。 inherited boolean - 如果为真,则包含继承的子列,否则只是指定表的字段。 null_frac real - 记录中字段组合为空的百分比。 avg_width integer - 字段组合记录以字节记的平均宽度。 n_distinct real - 如果大于0,表示字段组合中独立数值的估计数目。 如果小于0,表示独立数值的数目被行数除的负数。 如果等于0,表示独立数值的数目未知。 说明: 用负数形式是因为ANALYZE认为独立数值的数目是随着表增长而增长; 正数的形式用于在字段看上去好像有固定的可能值数目的情况下。比如,-1表示一个字段组合中独立数值的个数和行数相同。 n_dndistinct real - 标识dn1上字段组合中非NULL数据的唯一值的数目。 如果大于0,表示独立数值的实际数目。 如果小于0,表示独立数值的数目被行数除的负数。(比如,一个字段组合的数值平均出现概率为两次,则可以表示为n_dndistinct=-0.5)。 如果等于0,表示独立数值的数目未知。 most_common_vals anyarray - 一个字段组合里最常用数值的列表。如果该字段组合不存在最常用数值,则为NULL。本列保存的多列常用数值均不为NULL。 most_common_freqs real[] - 一个最常用数值组合的频率的列表,即每个出现的次数除以行数。如果most_common_vals是NULL,则为NULL。 most_common_vals_null anyarray - 一个字段组合里最常用数值的列表。如果该字段组合不存在最常用数值,则为NULL。本列保存的多列常用数值中至少有一个值为NULL。 most_common_freqs_null real[] - 一个最常用数值组合的频率的列表,即每个出现的次数除以行数。如果most_common_vals_null是NULL,则为NULL。 父主题: 系统视图
  • GLOBAL_WORKLOAD_TRANSACTION GLOBAL_WORKLOAD_TRANSACTION视图提供集群所有CN上WORKLOAD控制组相关的事务信息的总和。需要有系统管理员权限才可以访问。该视图仅在资源实时监控功能开启,即enable_resource_track为on时有效。 表1 GLOBAL_WORKLOAD_TRANSACTION字段 名称 类型 描述 workload name WORKLOAD控制组名称。 commit_counter bigint 各CN上提交次数总和。 rollback_counter bigint 各CN上回滚次数总和。 resp_min bigint 集群总体最小响应时间。 resp_max bigint 集群总体最大响应时间。 resp_avg bigint 各CN上平均响应时间。 resp_total bigint 各CN上响应时间总和。 父主题: 系统视图
  • 限制结果查询数量 如果需要查询只返回部分结果,可以使用LIMIT语句限制查询结果返回的记录数。 1 2 3 4 5 6 7 8 9 SELECT product_id,product_name,category,quantity FROM newproducts ORDER BY quantity DESC limit 5; product_id | product_name | category | quantity ------------+--------------+-------------+---------- 3577 | dumbbell | sports | 550 2344 | milklotion | skin care | 320 1666 | Frisbee | toys | 244 1210 | necklace | jewels | 200 1502 | earphones | electronics | 150 (5 rows)
  • 聚合查询 可以通过使用GROUP BY语句配合聚合函数,构建一个聚合查询来关注数据的整体情况。 1 2 3 4 5 6 7 8 9 SELECT category, string_agg(quantity,',') FROM newproducts group by category; category | string_agg -------------+------------ toys | 80,244 books | 100 sports | 550 jewels | 200 skin care | 320 electronics | 150
  • 对结果进行排序 使用ORDER BY语句可以让查询结果按照期望的方式进行排序。 1 2 3 4 5 6 7 8 9 10 11 SELECT product_id,product_name,category,quantity FROM newproducts ORDER BY quantity DESC; product_id | product_name | category | quantity ------------+--------------+-------------+---------- 3577 | dumbbell | sports | 550 2344 | milklotion | skin care | 320 1666 | Frisbee | toys | 244 1210 | necklace | jewels | 200 1502 | earphones | electronics | 150 1700 | interface | books | 100 1601 | telescope | toys | 80 (7 rows)
  • 对结果进行筛选 通过WHERE语句对查询的结果进行过滤,找到想要查询的部分。 1 2 3 4 5 6 SELECT * FROM newproducts WHERE category='toys'; product_id | product_name | category | quantity ------------+--------------+----------+---------- 1601 | telescope | toys | 80 1666 | Frisbee | toys | 244 (2 rows)
共100000条