华为云用户手册

  • 参数说明 String A:要转化的时间戳,20位以内的纯数字串,也可使用内置获取当前时间戳函数$timestamp()。 String B:可以由表1中的英文字母组成,最大长度为100。 表1 字母参数类型 字母 日期或时间元素 参数类型 示例 G Era 标志符 文本 AD y 年 年份 1996;96 M 年中的月份 月份 July; Jul; 07 w 年中的周数 数字 27 W 月份中的周数 数字 2 D 年中的第几天 数字 189 d 月份中的第几天 数字 10 F 月份中的第几个星期 数字 2 E 星期中的某天 文本 Tuesday; Tue a Am/pm 标记 文本 PM H 一天中的小时数(0-23) 数字 0 k 一天中的小时数(1-24) 数字 24 K am(中午)/pm(下午) 中的小时数(0-11) 数字 0 h am(中午)/pm(下午) 中的小时数(1-12) 数字 12 m 小时中的分钟数 数字 30 s 分钟中的秒数 数字 55 S 毫秒数 数字 978 z 时区缩写名称 文本 PST;EST Z 时区偏移量 文本 +800;-0530 各字母与其代表的含义一一对应,请注意大小写格式。 H、m、s中若有一个为0位时,其它两个也必须为0位。 日期时间值中,连接符允许使用空格,“-”、“/”、“:”,也可以不使用连接符,且不能含转义连接符,比如“\n”。例如如下常用格式(包括但不限于): yyyy-MM-dd HH:mm:ss SSS yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm yyyy-MM-dd HH yyyy-MM-dd yyyy-MM yyyy yy MM-dd HH MM-dd MM dd HH:mm:ss SSS HH:mm:ss HH:mm HH mm mm:ss ss SSS
  • 内置参数 内置参数是将HTTP/HTTPS响应的对应部分参数化,在检查点、响应提取功能中的“来源”选项中可以选择内置参数。 测试计划服务中的内置参数如下表: 内置参数 参数说明 是否支持多级取值 用途 举例 响应体(json) 表示接口返回的响应体。 是 检查点的属性字段 参数传递的属性字段 检查点:判断响应体中的id等于100。 设置方法:设置检查点来源为响应体(JSON),属性为id(前提条件响应体JSON串有id字段),设置比较符为等于(字符串、不区分大小写),设置目标值为100。 响应头 表示接口返回的响应头。 是 检查点的属性字段 参数传递的属性字段 检查点:判断响应头中的token等于abcd。 设置方法:设置来源为响应头,属性为token(前提条件响应头有token),设置比较符为等于(字符串、不区分大小写),设置目标值为abcd。 响应码 表示接口返回的响应码。 否 检查点的属性或值字 变量的属性字段 检查点:判断响应码等于200。 设置方法:设置来源为响应码,设置比较符为等于(数字),设置目标值为200。 内置参数支持多级取值,例如 响应体为“{"result":{"appId":12}}”时,则取appId的格式为:来源选择响应体,属性为“result.appId”。如果result是数组格式。则属性为“result[i].appId”,其中,i为非负整数。
  • 局部参数 局部参数使用范围是当前测试用例,如:测试步骤的参数、检查点、变量等都可以引用局部参数。 局部参数引用形式为“${参数名}”,如:参数名为“hostIp”,则可以使用“${hostIp}”来引用该参数。 局部参数主要配置项如下: 表1 参数主要配置项 配置项 是否必填 描述 名称 是 支持中英文、数字、点号、中文短横线、下划线的半角字符,并且长度范围是1~300。 类型 是 支持文本、随机字符串、随机整数、时间戳、格式化时间戳、生成UUID、Base64编码、MD5哈希值、密码或认证信息、SHA512编码。 详情介绍请参考表2。 描述 否 对参数的简要描述,上限为3000字符。默认为当前参数类型的描述。 单击“文本框”后,用户可以直接输入文本描述。 单击,输入一个json,单击“Json转换”,可以给没有换行的Json添加换行和缩进,单击“回填”添加成功。 值 否 用户可以为不同类型的参数赋值,详情请参考表2。 敏感变量 否 勾选为敏感数据后,测试计划对参数值加密存储,在测试结果日志中使用星号覆盖处理。敏感数据类型适用并不限于个人信息、鉴权信息,例如姓名、地址、用户名等。 动态变量 否 动态参数的值可以在用例执行过程中被赋值。动态参数初始值可为空,被赋值之后,此处显示的是最新值。 动态参数赋值方法:在用例测试步骤“响应提取”的“赋值给环境动态参数”中设置后,在测试执行时,响应提取的内容将被赋值给动态参数。 表2 参数类型 名称 描述 文本 上限为10000字符,支持设置“敏感参数”、“动态参数” ,默认为否。 随机字符串 随机生成指定长度字符串,随机字符串的变量值长度校验范围【1-9999】,不支持设置“敏感参数”及“动态参数”。 随机整数 随机生成指定范围整数,区间范围校验为【-999999999~999999999】,不支持设置“敏感参数”及“动态参数” 。 例如:设置【-9999,9999】 ,会获取这个区间内的随机整数。 时间戳 无需输入,生成当前整数时间戳,不支持设置“敏感参数”及“动态参数”。 格式化时间戳 参数的值默认为当前时间戳,用户可以单击右侧的下拉栏,选择需要的转化后格式。具体参数类型请参加表1,不支持设置“敏感参数”及“动态参数”。 例如:1.yyyy-MM-dd HH:mm:ss:33250825252000 , 预期值为3023-09-05 20:20:52。 2.yyyy-MM-dd:33250825252000,预期值为3023-09-05。 生成UUID 无需输入,不支持设置“敏感参数”及“动态参数”。 Base64编码 使用Base64方法编码参数,上限为256字符,不支持设置“敏感参数”及“动态参数”。 MD5哈希值 使用指定参数生成MD5哈希值,上限为256字符,不支持设置“敏感参数”及“动态参数”。 密码或认证信息 上限为256字符,不支持设置“敏感参数”及“动态参数”。默认勾选“敏感参数”。 SHA512编码 上限为256字符,不支持设置“敏感参数”及“动态参数”。默认勾选“敏感参数”。 数组 数组的内容是json数组格式,上限为10000字符,不支持设置“敏感参数”及“动态参数”。 局部参数配置方法如下: 在界面新建变量 进入接口自动化用例编辑的“脚本”页签,单击图标。 单击左上方“新建变量”,输入参数名、类型、值。 全部参数设置完毕,单击“保存”。 从本地批量导入变量 进入接口自动化用例编辑的“脚本”页签,单击图标。 单击“导入”。 在弹框中单击“下载模板”。 按照模板中的格式要求填写参数信息,返回页面,在弹框中单击,上传编写好的文档,单击“确定”。 查看导入结果: 导入成功:列表中将新增参数,新增的参数条数与Excel中编辑的行数相同。 导入失败:页面右上角会显示弹框提示失败,单击“详情”可以查看错误原因,修改后请重新导入。
  • 前提条件 执行实施步骤前,请确保已完成以下操作: 下载Logstash。 准备一台Windows系统的主机,在主机中安装Java Development Kit 1.8.111或以上版本和Git Bash。 创建Kafka实例和Topic,并获取Kafka实例信息。 Kafka实例未开启公网访问和SASL认证时,获取表2所示信息。 表2 Kafka实例信息(未开启公网访问和SASL认证) 参数名 获取途径 内网连接地址 在Kafka实例详情页的“连接信息”区域,获取“内网连接地址”。 Topic名称 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“Topic管理”,进入Topic列表页面,获取Topic名称。 下文以topic-logstash为例介绍。 Kafka实例未开启公网访问、已开启SASL认证时,获取表3所示信息。 表3 Kafka实例信息(未开启公网访问、已开启SASL认证) 参数名 获取途径 内网连接地址 在Kafka实例详情页的“连接信息”区域,获取“内网连接地址”。 开启的SASL认证机制 在Kafka实例详情页的“连接信息”区域,获取“开启的SASL认证机制”。 启用的安全协议 在Kafka实例详情页的“连接信息”区域,获取“启用的安全协议”。 证书 在Kafka实例详情页的“连接信息”区域,在“SSL证书”所在行,单击“下载”。下载压缩包后解压,获取压缩包中的客户端证书文件:client.jks。 SASL用户名和密码 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“用户管理”,进入用户列表页面,获取用户名。如果忘记了密码,单击“重置密码”,重新设置密码。 Topic名称 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“Topic管理”,进入Topic列表页面,获取Topic名称。 下文以topic-logstash为例介绍。 Kafka实例已开启公网访问、未开启SASL认证时,获取表4所示信息。 表4 Kafka实例信息(已开启公网访问、未开启SASL认证) 参数名 获取途径 公网连接地址 在Kafka实例详情页的“连接信息”区域,获取“公网连接地址”。 Topic名称 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“Topic管理”,进入Topic列表页面,获取Topic名称。 下文以topic-logstash为例介绍。 Kafka实例已开启公网访问和SASL认证时,获取表5所示信息。 表5 Kafka实例信息(已开启公网访问和SASL认证) 参数名 获取途径 公网连接地址 在实例详情页的“连接信息”区域,获取“公网连接地址” 开启的SASL认证机制 在Kafka实例详情页的“连接信息”区域,获取“开启的SASL认证机制”。 启用的安全协议 在Kafka实例详情页的“连接信息”区域,获取“启用的安全协议”。 证书 在Kafka实例详情页的“连接信息”区域,在“SSL证书”所在行,单击“下载”。下载压缩包后解压,获取压缩包中的客户端证书文件:client.jks。 SASL用户名和密码 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“用户管理”,进入用户列表页面,获取用户名。如果忘记了密码,单击“重置密码”,重新设置密码。 Topic名称 在Kafka实例控制台,单击实例名称,进入实例详情页。在左侧导航栏单击“Topic管理”,进入Topic列表页面,获取Topic名称。 下文以topic-logstash为例介绍。
  • 方案概述 应用场景 Logstash是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到指定的存储中。Kafka是一种高吞吐量的分布式发布订阅消息系统,也是Logstash支持的众多输入输出源之一。本章节主要介绍Logstash如何对接Kafka实例。 方案架构 Kafka实例作为Logstash输出源的示意图如下。 图1 Kafka实例作为Logstash输出源 Logstash从数据库采集数据,然后发送到Kafka实例中进行存储。Kafka实例作为Logstash输出源时,由于Kafka的高吞吐量,可以存储大量数据。 Kafka实例作为Logstash输入源的示意图如下。 图2 Kafka实例作为Logstash输入源 日志采集客户端将数据发送到Kafka实例中,Logstash根据自身性能从Kafka实例中拉取数据。Kafka实例作为Logstash输入源时,可以防止突发流量对于Logstash的影响,以及解耦日志采集客户端和Logstash,保证系统的稳定性。
  • 约束与限制 Logstash从7.5版本开始支持Kafka Integration Plugin插件,Kafka Integration Plugin插件包含Kafka input Plugin和Kafka output Plugin。Kafka input Plugin用于从Kafka实例的Topic中读取数据,Kafka output Plugin把数据写入到Kafka实例的Topic。Logstash、Kafka Integration Plugin与Kafka客户端的版本对应关系如表1所示。请确保Kafka客户端版本大于或等于Kafka实例的版本。 表1 版本对应关系 Logstash版本 Kafka Integration Plugin版本 Kafka客户端版本 8.3~8.8 10.12.0 2.8.1 8.0~8.2 10.9.0~10.10.0 2.5.1 7.12~7.17 10.7.4~10.9.0 2.5.1 7.8~7.11 10.2.0~10.7.1 2.4 7.6~7.7 10.0.1 2.3.0 7.5 10.0.0 2.1.0
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上ANALYZE关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于VACUUM ANALYZE语句的机制是依次执行VACUUM和ANALYZE,因此当column_name错误时,会存在VACUUM执行成功但ANALYZE执行失败的情况;对于分区表,则会出现对某个分区VACUUM执行成功之后ANALYZE执行失败的情况。 partition_name 要清理的表的分区名称。缺省时为所有分区。
  • 示例 VACUUM 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 --创建表tbl_test,并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (1); --查看数据,和数据的ctid。 gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 1 (1 row) --删除该数据。 gaussdb=# DELETE FROM tbl_test; --重新插入一条数据,发现使用了一个新的ctid。 gaussdb=# INSERT INTO tbl_test VALUES (2); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,2) | 2 (1 row) --使用VACUUM命令之后,在插入数据,发现复用了旧的空间。 gaussdb=# VACUUM ANALYZE tbl_test; gaussdb=# INSERT INTO tbl_test VALUES (3); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 3 (0,2) | 2 (2 rows) --删除表。 gaussdb=# DROP TABLE tbl_test; VACUUM FULL --建表。 gaussdb=# CREATE TABLE tbl_test2(c1 int); --插入10万条数据并查看表的大小。 gaussdb=# INSERT INTO tbl_test2 VALUES (generate_series(1,100000)); gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --删除数据并查看表大小。 gaussdb=# DELETE FROM tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --使用VACUUM FULL回收空间,并查看表的大小。 gaussdb=# VACUUM FULL ANALYZE tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 0 bytes (1 row) --使用在线VACUUM FULL回收空间。 gaussdb=# VACUUM FULL ANALYZE tbl_test2 ONLINE; --删除。 gaussdb=# DROP TABLE tbl_test2;
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,三权分立开关关闭时,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM FULL通过重建表的方式将表内空闲空间归还给表空间,重建过程需要额外申请表中有效数据相当的存储空间。对于非段页式表,VACUUM FULL执行结束后,原表所占物理文件会被删除,原表所占的物理文件的空间会归还给操作系统;对于段页式表,VACUUM FULL执行结束后,原表所占的物理空间,会被归还给段页式数据文件,不会归还给操作系统。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL会跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,可能导致等锁时间过长或者死锁。 为保证性能和统计信息的准确性,避免VACUUM ANALYZE、AUTOANALYZE、手动ANALYZE等涉及ANALYZE的命令同时执行或执行过于频繁。 Ustore手动VACUUM与Astore手动VACUUM行为一致,会对堆表、索引等进行加锁清理;而Ustore的AUTOVACUUM仅做分区表GPI清理、堆表FSM更新以及索引页面回收。 VACUUM FULL分区表时,会遍历分区进行清理,并在分区清理后重建GPI,因此当分区较多时,建议先删除GPI,在VACUUM FULL执行完成后重新创建索引,以此降低VACUUM FULL的执行时间。 在线VACUUM FULL不支持对于数据库级、索引级、分区表、二级分区表、段页式表、hash bucket表、临时表、unlogged表对象执行在线VACUUM FULL。如对象涉及以上不支持的类型,ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 执行在线VACUUM FULL操作时,需预留足够的磁盘空间,即剩余空间是所操作的表(及其上索引等附属品)总和的1倍。 如果用户取消在线VACUUM FULL执行过程,首先进入残留清理流程,如果用户再次取消,则会结束清理流程导致残留。 在线VACUUM FULL与用户业务之间存在资源争抢,不适合大业务背景下做在线VACUUM FULL。对于资源有限的场景,建议采用细粒度资源管控进行操作,且不建议使用并行加速功能。 M-Compatibility模式下不支持在线VACUUM FULL操作。 在线VACUUM FULL不支持FREEZE关键字,若同时指定FREEZE关键字与ONLINE关键字,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 在线VACUUM FULL不支持在事务内执行,不支持在存储过程中执行。 若在线VACUUM FULL操作失败,表上可能会有明显存储空间膨胀。其中膨胀程度与在线VACUUM FULL执行时长以及并发写操作量成正比。长事务可能会阻塞在线VACUUM FULL,建议避免在长事务存在时进行在线VACUUM FULL。 在线VACUUM FULL执行后期将阻塞DQL操作,对并发的DML操作报错。 在线VACUUM FULL执行期间,应尽量避免与其他DDL并发执行,否则可能会出现死锁、报错等;若出现此类情况,可以重新连接客户端进行重试。 在线VACUUM FULL过程中会生成名为online$$ddl$$[hash值]的模式。 模式的属主默认为初始用户,不建议在线VACUUM FULL执行中操作此模式,可能会导致中止在线VACUUM FULL并产生未知错误。不建议用户对此模式下的表格进行查询。 用户不可创建online$$为前缀的模式,会有报错提示。若已存在同名模式冲突,在线VACUUM FULL将不会生效,在线VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句是因为模式名冲突不可在线。 - 若对象表上存在全局二级索引(GSI),ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 -
  • 语法格式 回收空间并更新统计信息,对关键字顺序无要求。 1 2 3 VACUUM [ ( { FULL | FREEZE | VERBOSE | { ANALYZE | ANALYSE } } [, ... ] ) ] [ table_name [ (column_name [, ...] ) ] [ PARTITION ( partition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 仅回收空间,不更新统计信息。 1 2 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 1 2 3 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ];
  • GS_TS_DICT_DEFINITION GS_TS_DICT_DEFINITION是自定义词典特性存储词典内容的系统表,用于自定义词典的创建和使用,当前版本仅支持查看系统表。 表1 GS_TS_DICT_DEFINITION字段 名称 类型 描述 dict_oid oid 词典内容归属词典的oid。 definition_type "char" 词典内容类型。 definition text 词典内容定义。 父主题: 其他系统表
  • 示例 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class SSL{ public static void main(String[] args) { Properties urlProps = new Properties(); String urls = "jdbc:gaussdb://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); urlProps.setProperty("user", userName); urlProps.setProperty("password", password); urlProps.setProperty("ssl", "true"); urlProps.setProperty("sslmode", "verify-ca"); /** * ================== 示例1 国密TLS单向认证 */ urlProps.setProperty("sslrootcert", "cacert.pem"); /* sslgmcipher仅允许配置为ECC_SM4_SM3 */ urlProps.setProperty("sslgmcipher", "ECC_SM4_SM3"); /** * ================== 示例2 国密TLS双向认证 */ urlProps.setProperty("sslrootcert", "cacert.pem"); /* sslgmcipher配置为ECC_SM4_SM3、ECDHE_SM4_SM3均可 */ urlProps.setProperty("sslgmcipher", "ECDHE_SM4_SM3"); urlProps.setProperty("sslcert", "client.crt"); urlProps.setProperty("sslkey", "client.key.pk8"); urlProps.setProperty("sslenccert", "client_enc.crt"); urlProps.setProperty("sslenckey", "client_enc.key.pk8"); // 创建数据库连接。 try { Class.forName("com.huawei.gaussdb.jdbc.Driver").newInstance(); } catch (Exception e) { e.printStackTrace(); } try { Connection conn; conn = DriverManager.getConnection(urls,urlProps); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } 使用JDBC客户端国密TLS能力,需要依赖1.1或以上版本的BGMProvider开源软件(bgmprovider-1.X.X-jar-with-dependencies.jar)。 使用JDBC客户端国密TLS能力,JDK要求为8u302及以上版本。 由于国密系列算法本身存在原理严密、计算复杂、安全强度高的特点,因此配置国密TLS加密传输后,相比于国际TLS会有明显的性能劣化。
  • 常见问题处理 [UnixODBC][Driver Manager]Can't open lib 'xxx/xxx/gsqlodbcw.so':file not found. 此问题的可能原因: odbcinst.ini文件中配置的路径不正确 确认的方法:执行ls命令查询错误信息中的路径,以确保该gsqlodbcw.so文件存在,同时具有执行权限。 gsqlodbcw.so的依赖库不存在,或者不在系统环境变量中 确认的方法:执行ldd命令查询错误信息中的路径,如果是缺少libodbc.so.1等UnixODBC的库,那么按照“操作步骤”中的方法重新配置UnixODBC,并确保它的安装路径下的lib目录添加到了LD_LIBRARY_PATH中。如果重装仍无法解决,可以手动将数据库安装包下的unixodbc/lib下的内容复制到UnixODBC的安装路径下的lib目录。如果是缺少其他库,请将ODBC驱动包中的lib目录添加到LD_LIBRARY_PATH中。如果缺少其他标准库,请自行安装。 [UnixODBC]connect to server failed: no such file or directory 此问题的可能原因: 配置了错误的/不可达的数据库地址,或者端口 请检查数据源配置中的Servername及Port配置项。 服务器侦听不正确 如果确认Servername及Port配置正确,请根据“操作步骤”中数据库服务器的相关配置,确保数据库侦听了合适的网卡及端口。 防火墙及网闸设备 请确认防火墙设置,将数据库的通信端口添加到可信端口中。 如果有网闸设备,请确认相关的设置。 [unixODBC]The password-stored method is not supported. 此问题的可能原因: 数据源中未配置sslmode配置项。 解决办法: 请配置该选项至allow或以上选项。此配置的更多信息,请参见表3。 Server common name "xxxx" does not match host name "xxxxx" 此问题的可能原因: 使用了SSL加密的“verify-full”选项,驱动程序会验证证书中的主机名与实际部署数据库的主机名是否一致。 解决办法: 碰到此问题可以使用“verify-ca”选项,不再校验主机名,或者重新生成一套与数据库所在主机名相同的服务端证书。 Driver's SQLAllocHandle on SQL_HANDLE_DBC failed 此问题的可能原因: 可执行文件(比如UnixODBC的isql,以下都以isql为例)与数据库驱动(gsqlodbcw.so)依赖于不同的ODBC的库版本:libodbc.so.1或者libodbc.so.2。此问题可以通过如下方式确认: ldd `which isql` | grep odbc ldd gsqlodbcw.so | grep odbc 这时,如果输出的libodbc.so最后的后缀数字不同或者指向不同的磁盘物理文件,那么基本就可以断定是此问题。isql与gsqlodbcw.so都会要求加载libodbc.so,这时如果它们加载的是不同的物理文件,便会导致两套完全同名的函数列表,同时出现在同一个可见域里(UnixODBC的libodbc.so.*的函数导出列表完全一致),产生冲突,无法加载数据库驱动。 解决办法: 确定一个要使用的UnixODBC,卸载另外一个(比如卸载库版本号为.so.2的UnixODBC),然后将剩下的.so.1的库,新建一个同名但是后缀为.so.2的软链接,便可解决此问题。 FATAL: Forbid remote connection with trust method! 由于安全原因,数据库CN禁止集群内部其他节点无认证接入。 如果要在集群内部访问CN,请将ODBC程序部署在CN所在机器,服务器地址使用"127.0.0.1"。建议业务系统单独部署在集群外部,否则可能会影响数据库运行性能。 [unixODBC][Driver Manager]Invalid attribute value 在使用SQL on other GaussDB 功能时碰到此问题,有可能是unixODBC的版本并非推荐版本,建议通过“odbcinst --version”命令排查环境中的unixODBC版本。 authentication method 10 not supported. 使用开源客户端碰到此问题,可能原因: 数据库中存储的密码校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。 数据库并不存储用户密码,只存储用户密码的哈希码。 当用户更新用户密码或者新建用户时,数据库会同时存储两种格式的哈希码,这时将兼容开源的认证协议。 当旧版本数据库升级到新版本时,由于哈希的不可逆性,数据库无法还原用户密码,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做密码认证。 MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 要解决该问题,可以更新用户密码(请参见ALTER USER),或者新建一个用户(请参见CREATE USER),赋予同等权限,使用新用户连接数据库。 unsupported frontend protocol 3.51: server supports 1.0 to 3.0 目标数据库版本过低,或者目标数据库为开源数据库。 请使用对应版本的数据库驱动连接目标数据库。 FATAL: GSS authentication method is not allowed because XXXX user password is not disabled. 目标CN的gs_hba.conf里配置了当前客户端IP使用"gss"方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到"sha256"后再试。 isql:error while loading shared libraries:xxx 环境缺少该动态库,需要自行安装对应的库。
  • 操作步骤 安装unixODBC(默认unixODBC源码包已在环境准备中获取)。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。 以unixODBC-2.3.7版本为例,在客户端执行如下命令安装unixODBC。 tar zxvf unixODBC-2.3.7.tar.gz cd unixODBC-2.3.7 ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install 目前不支持unixODBC-2.2.1版本。 默认安装到“/usr/local”目录下,生成数据源文件到 “/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。 通过编译带有--enable-fastvalidate=yes选项的unixODBC来获得更高性能。但此选项可能会导致向ODBC API传递无效句柄的应用程序发生故障,而不是返回SQL_INVALID_HANDLE错误。 替换客户端GaussDB驱动程序。 将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都复制到“/usr/local/lib”目录下。 配置数据源。 配置ODBC驱动文件。 在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。 [GaussMPP] Driver64=/usr/local/lib/gsqlodbcw.so setup=/usr/local/lib/gsqlodbcw.so odbcinst.ini文件中的配置参数说明如表1所示。 表1 odbcinst.ini文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源DSN中的驱动名。 [DRIVER_N] Driver64 驱动动态库的路径。 Driver64=/usr/local/lib/gsqlodbcw.so setup 驱动安装路径,与Driver64中动态库的路径一致。 setup=/usr/local/lib/gsqlodbcw.so 配置数据源文件。 在“/usr/local/etc/odbc.ini”文件中追加以下内容。 [MPPODBC] Driver=GaussMPP Servername=127.0.0.1 #数据库Server IP Database=db1 #数据库名 Username=omm #数据库用户名 Password= #数据库用户密码 Port=8000 #数据库侦听端口 Sslmode=allow odbc.ini文件配置参数说明如表2所示。 表2 odbc.ini文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [MPPODBC] Driver 驱动名,对应odbcinst.ini中的DriverName。 Driver=DRIVER_N Servername 服务器的IP地址。可配置多个IP地址。支持IPv4和IPv6。 Servername=127.0.0.1 Database 要连接的数据库的名称。 Database=db1 Username 数据库用户名称。 Username=omm Password 数据库用户密码。 说明: ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 须知: 配置文件中填写密码时,需要遵循http规则: 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。 "+"会被替换为空格" "。 Password=******** Port 服务器的端口号。当开启负载均衡时,可配置多个端口号,且需与配置的多IP一一对应。如果开启负载均衡配置多个IP时,仍只配置一个端口号,则默认所有IP共用同一个端口号,即为配置的端口号。 Port=8000 Sslmode 是否启用 SSL 连接。 说明: 关于Sslmode的选项的允许值,具体信息如表3 Sslmode的可选项及其描述所示。 Sslmode=allow Debug 是否启用调试模式。 取值范围:0 ~ INT_MAX 设置为0时表示不开启。 设置为大于0时表示将会打印gsqlodbc驱动的mylog,日志生成目录为/tmp/。 默认值为0。 Debug=1 UseServerSidePrepare 是否开启数据库端扩展查询协议。 取值范围:0,1 取值为0表示不开启。 取值为1表示开启。 默认值为1。 UseServerSidePrepare=1 UseBatchProtocol 是否开启批量查询协议(打开可提高DML性能)。 取值范围:0,1 取值为0时,不使用批量查询协议(主要用于与早期数据库版本通信兼容)。 取值为1,并且数据库support_batch_bind参数存在且为on时,将打开批量查询协议。 默认值为1。 UseBatchProtocol=1 ForExtensionConnector 此开关控制着savepoint是否发送,savepoint相关问题可以注意此开关, 取值范围:0,1 取值为0时表示发送savepoint。 取值为1时表示不发送savepoint。 默认值为1。 ForExtensionConnector=1 ConnectionExtraInfo GUC参数connection_info中显示驱动部署路径和进程属主用户的开关。 取值范围:0,1 取值为0时表示不打开此开关。 取值为1时表示打开此开关。 默认值为0。 说明: 当设置为1时,ODBC驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在GUC参数connection_info里,同时可以在PG_STAT_ACTIVITY和PGXC_STAT_ACTIVITY中查询到。 ConnectionExtraInfo=1 BoolsAsChar 是否将布尔值作为字符处理。 取值范围:0,1 取值为0时表示Bools值将会映射为SQL_BIT。 取值为1时表示Bools值将会映射为SQL_CHAR。 默认值为1。 BoolsAsChar = 1 RowVersioning 是否在更新一行数据时,允许应用检测数据有没有被其他用户进行修改。 取值范围:0,1 取值为0时表示不允许应用检测。 取值为1时表示允许应用检测。 默认值为0。 RowVersioning=1 ShowSystemTables 是否将默认系统表格视为普通SQL表格。 取值范围:0,1 取值为0时驱动不会将默认系统表格视为普通SQL表格。 取值为1时驱动将默认系统表格视为普通SQL表格。 默认值为0。 ShowSystemTables=1 AutoBalance ODBC控制负载均衡的开关。 取值范围:0,1 取值为0时表示不开启负载均衡。 取值为1时开启负载均衡。 默认值为0。 AutoBalance=1 RefreshCNListTime 开启负载均衡时可配置该参数,该参数为刷新CN列表的时间。整数型,单位为秒。 取值范围:0 ~ INT_MAX 取值为0时表示不开启该参数。 取值大于0时表示该设定值为刷新CN列表的时间。 默认值为10 RefreshCNListTime=5 Priority 开启负载均衡时可配置该参数。 取值范围:0,1 取值为0时表示不开启该参数。 取值为1时开启该参数。 默认值为0。 说明: 当Priority开启时,应用程序发起的所有连接优先发送到配置文件中配置的CN上,当配置的CN全部不可用时,连接才会发送到剩余的CN上。 Priority=1 UsingEip 开启负载均衡时可配置该参数。 取值范围:0,1 取值为0时表示不开启该参数。 取值为1时开启该参数。 默认值为0。 说明: 此值用于控制是否使用弹性公网IP做负载均衡。当UsingEip开启时,表示使用弹性公网IP做负载均衡;关闭表示使用数据IP做负载均衡。 UsingEip=1 MaxCacheQueries 控制每个连接缓存的预编译语句个数。 取值范围:0 ~ 4096 默认值为0。 说明: 如果设置为0,则不开启客户端预编译语句缓存池。设置为大于4096的值会限制为4096。如果执行过的语句个数超过MaxCacheQueries设置的上限,则淘汰最近最少使用的语句。 MaxCacheQueries=128 MaxCacheSizeMiB 控制每个连接缓存的预编译语句总大小,在MaxCacheQueries大于0时生效。 取值范围:0 ~ 4096 默认值为1。 说明: 如果缓存的语句总长度大于MaxCacheSizeMiB则淘汰最近最少使用的语句。单位为MB,设置为大于4096的值会限制为4096。 MaxCacheSizeMiB=10 TcpUserTimeout 在支持TCP_USER_TIMEOUT套接字选项的操作系统上,指定传输的数据在TCP连接被强制关闭之前可以保持未确认状态的最大时长。 取值范围:0 ~ INT_MAX 默认值为0。 说明: 0表示使用系统缺省。通过Unix域套接字做的连接忽略这个参数。单位为毫秒。 TcpUserTimeout=5000 StandbyRead 用于指定分布式是否开启备机读模式。 取值范围:0,1 取值为0时表示禁用备机读模式。 取值为1时表示开启备机读模式。 默认值为0。 StandbyRead=1 KeepaliveTime 在TCP应该发送一个保持激活的信息给服务器之后,控制不活动的秒数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveTime=2 KeepaliveInterval 在TCP保持激活信息没有被应该传播的服务器承认之后,控制秒数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveInterval=2 KeepaliveCount 控制TCP发送保持激活信息的次数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveCount=2 SocketTimeout 用于控制客户端与服务端建立连接完全成功后的socket读写超时时间。单位为秒,默认为0。 说明: 该参数包括了数据库语句执行的超时时间,设置的过小可能导致语句执行时间本身发生超时,因此默认为0,需根据场景配置,建议设置非0值。 SocketTimeout=5 SocketTimeoutInConnect 用于控制TCP三次握手成功后,客户端与服务端建立连接阶段的socket读写超时时间。单位为秒,默认为5。 说明: 该参数区别于SocketTimeout:由于三次握手成功后的客户端与服务端建立连接阶段可能存在阻塞,因此需要设置不影响语句执行超时的socket读写超时时间。 SocketTimeoutInConnect=5 CancelTimeout 用于控制应用端发送cancel消息的超时时间。单位为秒,默认为0。 CancelTimeout=5 TcpSYNRetries 用于控制TCP三次握手阶段时SYN最多重传的次数,超过该次数仍未建连成功即报错。默认为0次。 说明: 该参数在支持TCP_SYNCNT套接字选项的操作系统上,指定客户端建立连接三次握手阶段SYN包发送失败而重传的次数。0值表示使用系统缺省。通过Unix域套接字的连接忽略这个参数。 TcpSYNRetries=3 TextAsLongVarchar 若TextAsLongVarchar=1,则将内核侧text类型映射为驱动侧的SQL_LONGVARCHAR类型;TextAsLongVarchar=0,则将内核侧text类型映射为驱动侧的SQL_VARCHAR类型。默认值为1。 TextAsLongVarchar=1 MaxLongVarcharSize 驱动侧的SQL_LONGVARCHAR类型的最大长度。默认值为8190。 MaxLongVarcharSize=8190 MaxVarcharSize 驱动侧的SQL_VARCHAR类型的最大长度。默认值为255。 MaxVarcharSize=255 表3 Sslmode的可选项及其描述 Sslmode 是否会启用SSL加密 描述 disable 否 不使用SSL安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用SSL安全连接,但是只做了 数据加密 ,并不验证数据库服务器的真实性。 verify-ca 是 必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。GaussDB不支持此模式。 用户通过ODBC连接GaussDB服务器时,可以通过开启SSL加密客户端和服务器之间的通讯。在使用SSL时,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参考Openssl相关文档和命令。 在客户端配置环境变量。 vim ~/.bashrc 在配置文件中追加以下内容。 export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export OD BCS YSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini 执行如下命令使设置生效。 source ~/.bashrc 测试连接。 安装后/usr/bin下面会存放生成的二进制,可执行isql -v MPPODBC(数据源名称)命令。 如果显示如下信息,表明配置正确,连接成功。 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ 若显示ERROR信息,则表明配置错误。请检查上述配置步骤是否正确执行。 若是集群环境,需要在所有机器上都复制配置一份unixODBC。 目前通过ODBC连接数据库时,会如下设置内核参数: SET extra_float_digits = 2; SET DateStyle = 'ISO'; 这些参数可能会导致ODBC客户端的行为与gsql客户端的行为不一致,例如,Date数据显示方式、浮点数精度表示。如果实际期望和这些配置不符,建议在ODBC应用代码中显式设定这些参数。 M-Compatibility模式数据库下,extra_float_digits的默认值为0。
  • 连接示例 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 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class SSL{ public static void main(String[] args) { Properties urlProps = new Properties(); String urls = "jdbc:gaussdb://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); /** * ================== 示例 使用证书 */ urlProps.setProperty("sslrootcert", "ca.pem"); urlProps.setProperty("user", userName); urlProps.setProperty("password", password); urlProps.setProperty("ssl", "true"); /* sslmode可配置为:require、verify-ca、verify-full,以下三个示例选择其一*/ /* ================== 示例2.1 设置sslmode为require,使用证书 */ urlProps.setProperty("sslmode", "require"); /* ================== 示例2.2 设置sslmode为verify-ca,使用证书 */ urlProps.setProperty("sslmode", "verify-ca"); /* ================== 示例2.3 设置sslmode为verify-full,使用证书(Linux下验证) */ urls = "jdbc:gaussdb://world:8000/database"; urlProps.setProperty("sslmode", "verify-full"); try { Class.forName("com.huawei.gaussdb.jdbc.Driver").newInstance(); } catch (Exception e) { e.printStackTrace(); } try { Connection conn; conn = DriverManager.getConnection(urls,urlProps); conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
  • 兼容PostgreSQL的函数和操作符 下述列表为GaussDB的内建函数和操作符兼容PostgreSQL。 _pg_char_max_length _pg_char_octet_length _pg_datetime_precision _pg_expandarray _pg_index_position _pg_interval_type _pg_numeric_precision _pg_numeric_precision_radix _pg_numeric_scale _pg_truetypid _pg_truetypmod q abs abstime abstimeeq abstimege abstimegt abstimein abstimele abstimelt abstimene abstimeout abstimerecv abstimesend aclcontains acldefault aclexplode aclinsert aclitemeq aclitemin aclitemout aclremove acos age akeys any_in any_out anyarray_in anyarray_out anyarray_recv anyarray_send anyelement_in anyelement_out anyenum_in anyenum_out anynonarray_in anynonarray_out anyrange_in anyrange_out anytextcat area areajoinsel areasel array_agg array_agg_finalfn array_agg_transfn array_append array_cat array_dims array_eq array_fill array_ge array_gt array_in array_larger array_le array_length array_lower array_lt array_ndims array_ne array_out array_prepend array_recv array_send array_smaller array_to_json array_to_string array_typanalyze array_upper arraycontained arraycontains arraycontjoinsel arraycontsel arrayoverlap ascii asin atan atan2 avals avg big5_to_euc_tw big5_to_mic big5_to_utf8 bit bit_and bit_in bit_length bit_or bit_out bit_recv bit_send bitand bitcat bitcmp biteq bitge bitgt bitle bitlt bitne bitnot bitor bitshiftleft bitshiftright bittypmodin bittypmodout bitxor bool bool_and bool_or booland_statefunc booleq boolge boolgt boolin boolle boollt boolne boolor_statefunc boolout boolrecv boolsend box box_above box_above_eq box_add box_below box_below_eq box_center box_contain box_contain_pt box_contained box_distance box_div box_eq box_ge box_gt box_in box_intersect box_le box_left box_lt box_mul box_out box_overabove box_overbelow box_overlap box_overleft box_overright box_recv box_right box_same box_send box_sub bpchar bpchar_larger bpchar_pattern_ge bpchar_pattern_gt bpchar_pattern_le bpchar_pattern_lt bpchar_smaller bpchar_sortsupport bpcharcmp bpchareq bpcharge bpchargt bpchariclike bpcharicnlike bpcharicregexeq bpcharicregexne bpcharin bpcharle bpcharlike bpcharlt bpcharne bpcharnlike bpcharout bpcharrecv bpcharregexeq bpcharregexne bpcharsend bpchartypmodin bpchartypmodout broadcast btabstimecmp btarraycmp btbeginscan btboolcmp btbpchar_pattern_cmp btbuild btbuildempty btbulkdelete btcanreturn btcharcmp btcostestimate btendscan btfloat48cmp btfloat4cmp btfloat4sortsupport btfloat84cmp btfloat8cmp btfloat8sortsupport btgetbitmap btgettuple btinsert btint24cmp btint28cmp btint2cmp btint2sortsupport btint42cmp btint48cmp btint4cmp btint4sortsupport btint82cmp btint84cmp btint8cmp btint8sortsupport btmarkpos btnamecmp btnamesortsupport btoidcmp btoidsortsupport btoidvectorcmp btoptions btrecordcmp btreltimecmp btrescan btrestrpos btrim bttext_pattern_cmp bttextcmp bttextsortsupport bttidcmp bttintervalcmp btvacuumcleanup bytea_sortsupport bytea_string_agg_finalfn bytea_string_agg_transfn byteacat byteacmp byteaeq byteage byteagt byteain byteale bytealike bytealt byteane byteanlike byteaout bytearecv byteasend cash_cmp cash_div_cash cash_div_flt4 cash_div_flt8 cash_div_int2 cash_div_int4 cash_div_int8 cash_eq cash_ge cash_gt cash_in cash_le cash_lt cash_mi cash_mul_flt4 cash_mul_flt8 cash_mul_int2 cash_mul_int4 cash_mul_int8 cash_ne cash_out cash_pl cash_recv cash_send cashlarger cashsmaller cbrt ceil ceiling center char char_length character_length chareq charge chargt charin charle charlt charne charout charrecv charsend chr cideq cidin cidout cidr cidr_in cidr_out cidr_recv cidr_send cidrecv cidsend circle circle_above circle_add_pt circle_below circle_center circle_contain circle_contain_pt circle_contained circle_distance circle_div_pt circle_eq circle_ge circle_gt circle_in circle_le circle_left circle_lt circle_mul_pt circle_ne circle_out circle_overabove circle_overbelow circle_overlap circle_overleft circle_overright circle_recv circle_right circle_same circle_send circle_sub_pt clock_timestamp close_lb close_ls close_lseg close_pb close_pl close_ps close_sb close_sl col_description concat concat_ws contjoinsel contsel convert convert_from convert_to corr cos cot count covar_pop covar_samp cstring_in cstring_out cstring_recv cstring_send cume_dist current_database current_query current_schema xpath_exists current_setting current_user currtid currtid2 currval cursor_to_xml cursor_to_xmlschema database_to_xml database_to_xml_and_xmlschema database_to_xmlschema date date_cmp date_cmp_timestamp date_cmp_timestamptz date_eq date_eq_timestamp date_eq_timestamptz date_ge date_ge_timestamp date_ge_timestamptz date_gt date_gt_timestamp date_gt_timestamptz date_in date_larger date_le date_le_timestamp date_le_timestamptz date_lt date_lt_timestamp date_lt_timestamptz date_mi date_mi_interval date_mii date_ne date_ne_timestamp date_ne_timestamptz date_out date_pl_interval date_pli date_recv date_send date_smaller date_sortsupport daterange_canonical daterange_subdiff datetime_pl datetimetz_pl dcbrt decode defined degrees delete dense_rank dexp diagonal diameter dispell_init dispell_lexize dist_cpoly dist_lb dist_pb dist_pc dist_pl dist_ppath dist_ps dist_sb dist_sl div dlog1 dlog10 domain_in domain_recv dpow dround dsimple_init dsimple_lexize dsnowball_init dsnowball_lexize dsqrt dsynonym_init dsynonym_lexize dtrunc each enum_ne enum_out enum_range enum_recv enum_send enum_smaller eqjoinsel eqsel euc_cn_to_mic euc_cn_to_utf8 euc_jis_2004_to_shift_jis_2004 euc_jis_2004_to_utf8 euc_jp_to_mic euc_jp_to_sjis euc_jp_to_utf8 euc_kr_to_mic euc_kr_to_utf8 euc_tw_to_big5 euc_tw_to_mic euc_tw_to_utf8 every exist exists_all exists_any exp factorial family fdw_handler_in fdw_handler_out fetchval first_value float4 float4_accum float48div float48eq float48ge float48gt float48le float48lt float48mi float48mul float48ne float48pl float4abs float4div float4eq float4ge float4gt float4in float4larger float4le float4lt float4mi float4mul float4ne float4out float4pl float4recv float4send float4smaller float4um float4up float8 float8_accum float8_avg float8_collect float8_corr float8_covar_pop float8_covar_samp float8_regr_accum float8_regr_avgx float8_regr_avgy float8_regr_collect float8_regr_intercept float8_regr_r2 float8_regr_slope float8_regr_sxx float8_regr_sxy float8_regr_syy float8_stddev_pop float8_stddev_samp float8_var_pop float8_var_samp float84div float84eq float84ge float84gt float84le float84lt float84mi float84mul float84ne float84pl float8abs float8div float8eq float8ge float8gt float8in float8larger float8le float8lt float8mi float8mul float8ne float8out float8pl float8recv float8send float8smaller float8um float8up floor flt4_mul_cash flt8_mul_cash fmgr_c_validator fmgr_internal_validator fmgr_sql_validator format format_type gb18030_to_utf8 gbk_to_utf8 generate_series generate_subscripts get_bit get_byte get_current_ts_config get_global_gs_asp get_large_table_name - - - gtsquery_compress gtsquery_consistent gtsquery_decompress gtsquery_penalty gtsquery_picksplit gtsquery_same gtsquery_union gtsvector_compress gtsvector_consistent gtsvector_decompress gtsvector_penalty gtsvector_picksplit gtsvector_same gtsvector_union gtsvectorin gtsvectorout has_tablespace_privilege has_type_privilege hash_aclitem hashbeginscan hashbuild hashbuildempty hashbulkdelete hashcostestimate hashendscan hashgetbitmap hashgettuple hashinsert hashint2vector hashint4 hashint8 hashmacaddr hashmarkpos hashname hashoid hashoidvector hashoptions hashrescan hashrestrpos hashtext hashvacuumcleanup hashvarlena host hostmask iclikejoinsel iclikesel icnlikejoinsel icnlikesel icregexeqjoinsel icregexeqsel icregexnejoinsel icregexnesel inet_client_addr inet_client_port inet_in inet_out inet_recv inet_send inet_server_addr inet_server_port inetand inetmi inetmi_int8 inetnot inetor inetpl initcap int2_accum int2_avg_accum int2_mul_cash int2_sum int24div int24eq int24ge int24gt int24le int24lt int24mi int24mul int24ne int24pl int28div int28eq int28ge int28gt int28le int28lt int28mi int28mul int28ne int28pl int2abs int2and int2div int2eq int2ge int2gt int2in int2larger int2le int2lt int2mi int2mod int2mul int2ne int2not int2or int2out int2pl int2recv int2send int2shl int2shr int2smaller int2um int2up int2vectoreq int2vectorin int2vectorout int2vectorrecv int2vectorsend int2xor int4_accum int4_avg_accum int4_mul_cash int4_sum int42div int42eq int42ge int42gt int42le int42lt int42mi int42mul int42ne int42pl int48div int48eq int48ge int48gt int48le int48lt int48mi int48mul int48ne int48pl int4abs int4and int4div int4eq int4ge int4gt int4in int4inc int4larger int4le int4lt int4mi int4mod int4mul int4ne int4not int4or int4out int4pl int4range int4range_canonical int4range_subdiff int4recv int4send int4shl int4shr int4smaller int4um int4up int4xor int8 int8_avg int8_avg_accum int8_avg_collect int8_mul_cash int8_sum int8_sum_to_int8 int8+1635:1668_accum int82div int82eq int82ge int82gt int82le int82lt int82mi int82mul int82ne int82pl int84div int84eq int84ge int84gt int84le int84lt int84mi int84mul int84ne int84pl int8abs int8and int8div int8eq int8ge int8gt int8in int8inc int8inc_any int8inc_float8_float8 int8larger int8le int8lt int8mi int8mod int8mul int8ne int8not int8or int8out int8pl int8pl_inet int8range int8range_canonical int8range_subdiff int8recv int8send int8shl int8shr int8smaller int8um int8up int8xor integer_pl_date inter_lb inter_sb inter_sl internal_in internal_out interval interval_accum interval_avg interval_cmp interval_collect interval_div interval_eq interval_ge interval_gt interval_hash interval_in interval_larger interval_le interval_lt interval_mi interval_mul interval_ne interval_out interval_pl interval_pl_date interval_pl_time interval_pl_timestamp interval_pl_timestamptz interval_pl_timetz interval_recv interval_send interval_smaller interval_transform interval_um intervaltypmodin intervaltypmodout intinterval isexists ishorizontal iso_to_koi8r iso_to_mic iso_to_win1251 iso_to_win866 iso8859_1_to_utf8 iso8859_to_utf8 isparallel isperp isvertical johab_to_utf8 jsonb_in jsonb_out jsonb_recv jsonb_send - - - json_in json_out json_recv json_send justify_days justify_hours justify_interval koi8r_to_iso koi8r_to_mic koi8r_to_utf8 koi8r_to_win1251 koi8r_to_win866 koi8u_to_utf8 language_handler_in language_handler_out latin1_to_mic latin2_to_mic latin2_to_win1250 latin3_to_mic latin4_to_mic like_escape likejoinsel likesel line line_distance line_eq line_horizontal line_in line_interpt line_intersect line_out line_parallel line_perp line_recv line_send line_vertical ln lo_close lo_creat lo_create lo_export lo_import lo_lseek lo_open lo_tell lo_truncate lo_unlink log loread lower lower_inc lower_inf lowrite lpad lseg lseg_center lseg_distance lseg_eq lseg_ge lseg_gt lseg_horizontal lseg_in lseg_interpt lseg_intersect lseg_le lseg_length lseg_lt lseg_ne lseg_out lseg_parallel lseg_perp lseg_recv lseg_send lseg_vertical ltrim macaddr_and macaddr_cmp macaddr_eq macaddr_ge macaddr_gt macaddr_in macaddr_le macaddr_lt macaddr_ne macaddr_not macaddr_or macaddr_out macaddr_recv macaddr_send makeaclitem masklen max md5 MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 mic_to_big5 mic_to_euc_cn mic_to_euc_jp mic_to_euc_kr mic_to_euc_tw mic_to_iso mic_to_koi8r mic_to_latin1 mic_to_latin2 mic_to_latin3 mic_to_latin4 mic_to_sjis mic_to_win1250 mic_to_win1251 mic_to_win866 min mktinterval money mul_d_interval name nameeq namege namegt nameiclike nameicnlike nameicregexeq nameicregexne namein namele namelike namelt namene namenlike nameout namerecv nameregexeq nameregexne namesend neqjoinsel neqsel network_cmp network_eq network_ge network_gt network_le network_lt network_ne network_sub network_subeq network_sup network_supeq nlikejoinsel nlikesel numeric numeric_abs numeric_accum numeric_add numeric_avg numeric_avg_accum numeric_avg_collect numeric_cmp numeric_collect numeric_div numeric_div_trunc numeric_eq numeric_exp numeric_fac numeric_ge numeric_gt numeric_in numeric_inc numeric_larger numeric_le numeric_ln numeric_log numeric_lt numeric_mod numeric_mul numeric_ne numeric_out numeric_power numeric_recv numeric_send numeric_smaller numeric_sortsupport numeric_sqrt numeric_stddev_pop numeric_stddev_samp numeric_sub numeric_transform numeric_uminus numeric_uplus numeric_var_pop numeric_var_samp numerictypmodin numerictypmodout numrange_subdiff oid oideq oidge oidgt oidin oidlarger oidle oidlt oidne oidout oidrecv oidsend oidsmaller oidvectoreq oidvectorge oidvectorgt oidvectorin oidvectorle oidvectorlt oidvectorne oidvectorout oidvectorrecv oidvectorsend oidvectortypes on_pb on_pl on_ppath on_ps on_sb on_sl opaque_in opaque_out ordered_set_transition overlaps overlay path path_add path_add_pt path_center path_contain_pt path_distance path_div_pt path_in path_inter path_length path_mul_pt path_n_eq path_n_ge path_n_gt path_n_le path_n_lt path_npoints path_out path_recv path_send path_sub_pt percentile_cont percentile_cont_float8_final percentile_cont_interval_final pg_char_to_encoding pg_cursor pg_encoding_max_length pg_encoding_to_char pg_extension_config_dump - - pg_node_tree_in pg_node_tree_out pg_node_tree_recv pg_node_tree_send pg_prepared_statement pg_prepared_xact pg_notify pg_stat_get_wal_receiver pg_show_all_settings pg_stat_get_bgwriter_stat_reset_time pg_stat_get_buf_fsync_backend pg_stat_get_checkpoint_sync_time pg_stat_get_checkpoint_write_time pg_stat_get_db_blk_read_time pg_stat_get_db_blk_write_time pg_stat_get_db_conflict_all pg_stat_get_db_conflict_bufferpin pg_stat_get_db_conflict_snapshot pg_stat_get_db_conflict_startup_deadlock pg_switch_xlog xpath pg_timezone_abbrevs pg_timezone_names pgxc_node_str plpgsql_call_handler plpgsql_inline_handler plpgsql_validator point_above point_add point_below point_distance point_div point_eq point_horiz point_in point_left point_mul point_ne point_out point_recv point_right point_send point_sub point_vert poly_above poly_below poly_center poly_contain poly_contain_pt poly_contained poly_distance poly_in poly_left poly_npoints poly_out poly_overabove poly_overbelow poly_overlap poly_overleft poly_overright poly_recv poly_right poly_same poly_send polygon position positionjoinsel positionsel postgresql_fdw_validator pow power prsd_end prsd_headline prsd_lextype prsd_nexttoken prsd_start pt_contained_circle pt_contained_poly query_to_xml query_to_xml_and_xmlschema query_to_xmlschema quote_ident quote_literal quote_nullable radians radius random range_adjacent range_after range_before range_cmp range_contained_by range_contains range_contains_elem range_ge range_eq range_gt range_in range_intersect range_le range_lt range_minus range_ne range_out range_overlaps range_overleft range_overright range_recv range_send range_typanalyze range_union rank record_eq record_ge record_gt record_in record_le record_lt record_ne record_out record_recv record_send regclass regclassin regclassout regclassrecv regclasssend regconfigin regconfigout regconfigrecv regconfigsend regdictionaryin regdictionaryout regdictionaryrecv regdictionarysend regexeqjoinsel regexeqsel regexnejoinsel regexnesel regexp_matches regexp_replace regexp_split_to_array regexp_split_to_table regoperatorin regoperatorout regoperatorrecv regoperatorsend regoperin regoperout regoperrecv regopersend regprocedurein regprocedureout regprocedurerecv regproceduresend regprocin regprocout regprocrecv regprocsend regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy regtypein regtypeout regtyperecv regtypesend reltime reltimeeq reltimege reltimegt reltimein reltimele reltimelt reltimene reltimeout reltimerecv reltimesend repeat replace reverse RI_FKey_cascade_del RI_FKey_cascade_upd RI_FKey_check_ins RI_FKey_check_upd RI_FKey_noaction_del RI_FKey_noaction_upd RI_FKey_restrict_del RI_FKey_restrict_upd RI_FKey_setdefault_del RI_FKey_setdefault_upd RI_FKey_setnull_del RI_FKey_setnull_upd right round row_number row_to_json rpad rtrim scalargtjoinsel scalargtsel scalarltjoinsel scalarltsel schema_to_xml schema_to_xml_and_xmlschema schema_to_xmlschema session_user set_bit set_byte set_config set_masklen shift_jis_2004_to_euc_jis_2004 shift_jis_2004_to_utf8 sjis_to_euc_jp sjis_to_mic sjis_to_utf8 smgrin smgrout spg_kd_choose spg_kd_config spg_kd_inner_consistent spg_kd_picksplit spg_quad_choose spg_quad_config spg_quad_inner_consistent spg_quad_leaf_consistent spg_quad_picksplit spg_text_choose spg_text_config spg_text_inner_consistent spg_text_leaf_consistent spg_text_picksplit spgbeginscan spgbuild spgbuildempty spgbulkdelete spgcanreturn spgcostestimate spgendscan spggetbitmap spggettuple spginsert spgmarkpos spgoptions spgrescan spgrestrpos spgvacuumcleanup stddev stddev_pop stddev_samp string_agg string_agg_finalfn string_agg_transfn strip sum suppress_redundant_updates_trigger table_to_xml table_to_xml_and_xmlschema table_to_xmlschema tan text text_ge text_gt text_larger text_le text_lt text_pattern_ge text_pattern_gt text_pattern_le text_pattern_lt text_smaller textanycat textcat texteq texticlike texticnlike texticregexeq texticregexne textin textlike textne textnlike textout textrecv textregexeq textregexne textsend thesaurus_init thesaurus_lexize tideq tidge tidgt tidin tidlarger tidle tidlt tidne tidout tidrecv tidsend tidsmaller time time_cmp time_eq time_ge time_gt time_hash time_in time_larger time_le time_lt time_mi_interval time_mi_time time_ne time_out time_pl_interval time_recv time_send time_smaller time_transform timedate_pl timemi timepl timestamp timestamp_cmp timestamp_cmp_date timestamp_cmp_timestamptz timestamp_eq timestamp_eq_date timestamp_eq_timestamptz timestamp_ge timestamp_ge_date timestamp_ge_timestamptz timestamp_gt timestamp_gt_date timestamp_gt_timestamptz timestamp_hash timestamp_in timestamp_larger timestamp_le timestamp_le_date timestamp_le_timestamptz timestamp_lt timestamp_lt_date timestamp_lt_timestamptz timestamp_mi timestamp_mi_interval timestamp_ne timestamp_ne_date timestamp_ne_timestamptz timestamp_out timestamp_pl_interval timestamp_recv timestamp_send timestamp_smaller timestamp_sortsupport timestamp_transform timestamptypmodin timestamptypmodout timestamptz timestamptz_cmp timestamptz_cmp_date timestamptz_cmp_timestamp timestamptz_eq timestamptz_eq_date timestamptz_eq_timestamp timestamptz_ge timestamptz_ge_date timestamptz_ge_timestamp timestamptz_gt timestamptz_gt_date timestamptz_gt_timestamp timestamptz_in timestamptz_larger timestamptz_le timestamptz_le_date timestamptz_le_timestamp timestamptz_lt timestamptz_lt_date timestamptz_lt_timestamp timestamptz_mi timestamptz_mi_interval timestamptz_ne timestamptz_ne_date timestamptz_ne_timestamp timestamptz_out timestamptz_pl_interval timestamptz_recv timestamptz_send timestamptz_smaller timestamptztypmodin timestamptztypmodout timetypmodin timetypmodout timetz timetz_cmp timetz_eq timetz_ge timetz_gt timetz_hash timetz_in timetz_larger timetz_le timetz_lt timetz_mi_interval timetz_ne timetz_out timetz_pl_interval timetz_recv timetz_send timetz_smaller timetzdate_pl timetztypmodin timetztypmodout timezone(2069) timezone(1159) timezone(2037) timezone (2070) timezone (1026) timezone (2038) tintervalct tintervaleq tintervalge tintervalgt tintervalin tintervalle tintervalleneq tintervallenge tintervallengt tintervallenle tintervallenlt tintervallenne tintervallt tintervalne tintervalout tintervalov tintervalrecv tintervalsame tintervalsend tintervalstart to_ascii(1845) to_ascii(1847) to_ascii(1846) trigger_in trigger_out ts_match_qv ts_match_tq ts_match_tt ts_match_vq ts_rank ts_rank_cd ts_rewrite ts_stat ts_token_type ts_typanalyze tsmatchjoinsel tsmatchsel tsq_mcontained tsq_mcontains tsquery_and tsquery_cmp tsquery_eq tsquery_ge tsquery_gt tsquery_le tsquery_lt tsquery_ne tsquery_not tsquery_or tsqueryin tsqueryout tsqueryrecv tsquerysend tsrange tsrange_subdiff tstzrange tstzrange_subdiff tsvector_cmp tsvector_concat tsvector_eq tsvector_ge tsvector_gt tsvector_le tsvector_lt tsvector_ne tsvector_update_trigger tsvector_update_trigger_column tsvectorin tsvectorout tsvectorrecv tsvectorsend txid_current txid_current_snapshot txid_snapshot_in txid_snapshot_out txid_snapshot_recv txid_snapshot_send txid_snapshot_xip txid_snapshot_xmax txid_snapshot_xmin txid_visible_in_snapshot uhc_to_utf8 unique_key_recheck unknownin unknownout unknownrecv unknownsend unnest utf8_to_big5 utf8_to_euc_cn utf8_to_euc_jis_2004 utf8_to_euc_jp utf8_to_euc_kr utf8_to_euc_tw utf8_to_gb18030 utf8_to_gbk utf8_to_iso8859 utf8_to_iso8859_1 utf8_to_johab utf8_to_koi8r utf8_to_koi8u utf8_to_shift_jis_2004 utf8_to_sjis utf8_to_uhc utf8_to_win uuid_cmp uuid_eq uuid_ge uuid_gt uuid_hash uuid_in uuid_le uuid_lt uuid_ne uuid_out uuid_recv uuid_send var_pop var_samp varbit varbit_in varbit_out varbit_recv varbit_send varbit_transform varbitcmp varbiteq varbitge varbitgt varbitle varbitlt varbitne varbittypmodin varbittypmodout varchar varchar_transform varcharin varcharout varcharrecv varcharsend varchartypmodin varchartypmodout variance void_in void_out void_recv void_send win_to_utf8 win1250_to_latin2 win1250_to_mic win1251_to_iso win1251_to_koi8r win1251_to_mic win1251_to_win866 win866_to_iso win866_to_koi8r win866_to_mic win866_to_win1251 xideq xideqint4 xidin xidout xidrecv xidsend xml xml_in xml_is_well_formed xml_is_well_formed_content xml_is_well_formed_document xml_out xml_recv xml_send xmlagg xmlcomment xmlconcat2 xmlexists xmlvalidate - year_in year_out year_recv year_send yeartypmodin yeartypmodout year_eq year_ne year_lt year_le year_gt year_ge year_cmp year_hash year_larger year_smaller year_mi year_mi_int4 int4_mi_year year_pl year_pl_int4 int4_pl_year int4_year year_int4 date_year numeric_year text_year time_year timestamp_year timestamptz_year bpcharlikebpchar bpcharnlikebpchar - - - - - 升级模式下,不支持调用变长参数的系统函数,如concat。
  • 支持 IAM 资源粒度授权的云服务 如果您需要授予IAM用户特定资源的相应权限,可以创建自定义策略并选择特定资源,该IAM用户将仅拥有对应资源的使用权限。例如创建自定义策略时,选择资源类型并添加资源路径:OBS:*:*:bucket:TestBucket*,即可授予IAM用户以TestBucket命名开头的桶相应权限。 下表为当前华为云支持资源级别授权的云服务及对应资源类型。 表1 支持资源粒度授权的云服务及其资源类型 服务 资源类型 资源名称 API开放平台SaaS(Apiexplorer-saas) product 产品 portal 门户 云堡垒机 (CBH) instanceId 实例ID 云容器引擎(CCE) cluster 集群 云服务操作中心(COC) schedule 定时运维 document 文档 drillPlan 演练规划 attackTask 攻击任务 contingencyPlan 应急预案 drillTask 演练任务 accountBaseline 账号基线 faultMode 故障模式 drillRecord 演练记录 job 任务 slaTemplate sla模板 attackTargetRecord 攻击任务的攻击目标记录 parameter 配置项 凭据管理服务( CS MS) secretName 凭据名称 智能数据洞察(DataArtsInsight) workspace 工作空间 分布式缓存服务(DCS) instance 实例 文档数据库服务(DDS) instanceName 实例名称 数据湖探索 DLI ) queue 队列 database 数据库 table 表 column 列 datasourceauth 安全认证信息 jobs 作业 resource 资源包 elasticresourcepool 弹性资源池 group 资源包组 variable 全局变量 分布式消息服务(DMS) rabbitmq RabbitMQ实例 kafka Kafka实例 rocketmq RocketMQ实例 数据仓库 服务(DWS) cluster 集群 弹性云服务器(ECS) instance 弹性云服务器 云硬盘(EVS) volume 云硬盘 函数工作流 服务(FunctionGraph) function 函数 trigger 触发器 图引擎服务(GES) graphName 图名称 backupName 备份名称 metadataName 元数据名称 IAM身份中心(IAM Identity Center) account 账号 permissionSet 权限集 instance 实例 智能边缘平台(IEF) product 产品 node 边缘节点 group 边缘节点组 deployment 应用部署 batchjob 批量作业 application 应用模板 appVersion 应用模板版本 IEFInstance IEF实例 设备接入(IoTDA) app 资源空间ID instance 实例ID 数据加密服务(KMS) KeyId 密钥ID MapReduce服务 MRS ) cluster 集群 对象存储服务 (OBS) bucket 桶 object 对象 云数据库(RDS) instance RDS实例 资源编排 服务( RFS ) privateModule 私有模块 stack 堆栈 stackSet 堆栈集 privateTemplate 私有模板 privateProvider 私有Provider 应用与 数据集成平台 ROMA Connect graph 业务流图ID 证书管理服务(SCM) cert 证书ID 安全云脑 (SecMaster) alert 告警 search 查询 playbook 剧本 workflow 流程 subscription 订购 indicator 威胁情报 alertRule 告警模型 connection 资产连接 mapping 分类映射 dataclass 数据类 report 报告 searchCondition 检索条件 agency 委托 resource 资源 layout 布局 dataobject 数据对象 emergencyVulnerability 应急漏洞 workspace 工作空间 metric 指标 dataspace 数据空间 catalogue 目录 task 待办 alertRuleTemplate 告警模板 pipe 数据管道 incident 事件 table 表 vulnerability 漏洞 容器镜像服务 (SWR) chart Chart repository 仓库 instance 企业版实例 虚拟私有云(VPC) publicip 弹性公网IP 父主题: 自定义策略
  • 操作步骤 使用具有ClickHouse系统表修改权限的用户登录客户端节点,连接到ClickHouse服务端,具体请参考ClickHouse客户端使用实践。 清理存量系统表数据,执行如下命令: truncate table system.query_log on cluster default_cluster; truncate table system.query_thread_log on cluster default_cluster; truncate table system.trace_log on cluster default_cluster; 系统表配置TTL,保留近30天的数据,执行如下命令: alter table system.query_log on cluster default_cluster modify TTL event_time + INTERVAL 30 day; alter table system.query_thread_log on cluster default_cluster modify TTL event_time + INTERVAL 30 day; alter table system.trace_log on cluster default_cluster modify TTL event_time + INTERVAL 30 day;
  • 操作步骤 下载并安装Hudi客户端,具体请参考安装MRS客户端章节。 目前Hudi集成在Spark中,用户从Manager页面下载Spark客户端即可,例如客户端安装目录为:“/opt/client”。 使用root登录客户端安装节点,执行如下命令: cd /opt/client 执行命令加载环境变量: source bigdata_env source Hudi/component_env kinit 创建的用户 新创建的用户需要修改密码,更改密码后重新kinit登录。 普通模式(未开启kerberos认证)无需执行kinit命令。 多服务场景下,在source bigdata_env之后,请先source Spark服务的component_env,再去source Hudi的component_env。 启动spark-sql。 创建Hudi表: create table if not exists hudi_table2 (id int,name string,price double) using hudi options (type = 'cow',primaryKey = 'id',preCombineField = 'price'); 插入数据: insert into hudi_table2 select 1,1,1; insert into hudi_table2 select 2,1,1; 更新数据: update hudi_table2 set name=3 where id=1; 删除数据: delete from hudi_table2 where id=2; 查询数据: select * from hudi_table2;
  • 示例 // 删除单分区 alter table $tableName drop partition (dt='2021-10-01') // 删除多分区 alter table $tableName drop partition (dt='2021-10-01', dt='2021-10-02') // 模糊匹配,删除多分区 alter table $tableName drop partition (dt='2021-10-*') // 删除10月份的分区
  • ClickHouse数据写入HDFS流程 将ClickHouse数据写入HDFS,参考以下流程。例如写入HDFS的/tmp目录下的secure_ck.txt数据文件: 创建HDFS引擎表: CREATE TABLE hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://{namenode_ip}:{dfs.namenode.rpc.port}/tmp/secure_ck.txt', 'TSV') 写入HDFS数据文件: INSERT INTO hdfs_engine_table VALUES ('one', 1), ('two', 2), ('three', 3) 查询HDFS数据文件: SELECT * FROM hdfs_engine_table LIMIT 2 ┌─name─┬─value─┐ │ one │ 1 │ │ two │ 2 │ └────┴─── ─┘ ClickHouse通过HDFS引擎表写入数据到HDFS时,如果HDFS上数据文件不存在,会生成对应的数据文件。 ClickHouse不支持删除修改和追加写HDFS引擎表数据,只能一次性写入数据。 ClickHouse删除HDFS引擎表以后对HDFS上的数据文件没有影响。
  • 审计日志表字段介绍 表1 审计日志表字段介绍 字段名称 字段类型 字段描述 query_id varchar(48) 查询任务的ID。 time datetime 查询开始时间。 client_ip varchar(200) 客户端的IP地址和端口号。 user varchar(64) 执行查询语句的用户名。 catalog varchar(128) 查询所属的Catalog名称。 db varchar(96) 查询所属的数据库名称。 state varchar(8) 查询结果状态。 error_code int 查询失败时的错误码。 error_message string 查询失败时的错误信息。 query_time bigint 查询执行时间,单位为ms。 scan_bytes bigint 查询总共扫描的字节数。 scan_rows bigint 查询总共扫描的行数。 return_rows bigint 查询结果返回的行数。 stmt_id int 自增ID。 is_query tinyint 是否为查询语句。 1:表示是查询语句。 0:表示不是查询语句。 frontend_ip varchar(200) 执行查询的FE的IP地址。 cpu_time_ms bigint 查询总共消耗的CPU时间。 sql_hash varchar(48) 查询的HASH值。 sql_digest varchar(48) SQL摘要,非慢查询时为空。 peak_memory_bytes bigint 所有BE节点使用的内存峰值,单位为字节。 stmt string 具体执行的SQL语句信息。 reserve1 string 保留字段1。 reserve2 string 保留字段2。
  • 使用场景 当前开源社区提供了可插拔的Payload机制,用于满足客户各种聚合需求。但Payload的开发有一定的门槛,因此MRS内置了一些常见的聚合函数满足客户日常需求。该特性允许用户使用Hudi自带的聚合函数实现相同主键的聚合操作。 当前支持的聚合函数和数据类型如下: sum:求和函数可以跨多行聚合值,支持DECIMAL(小数)、SHORT(小整数)、INTEGER(整数)、BIGINT(大整数)、FLOAT(浮点数)和DOUBLE(双精度浮点数)数据类型。 product:乘积函数可以计算多行的乘积值,支持DECIMAL、SHORT、INTEGER、BIGINT、FLOAT和DOUBLE数据类型。 count:计数函数可以跨多行计数值,支持INTEGER(整数)和BIGINT(大整数)数据类型。 max:最大值函数可以识别并保留最大值,支持STRING、DECIMAL、SHORT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIMESTAMP数据类型。 min:最小值函数可以识别并保留最小值,支持STRING、DECIMAL、SHORT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIMESTAMP数据类型。 last_value:最后值函数用最近导入的值替换之前的值,支持所有数据类型。 last_non_null_value:非空最后值函数用最新的非空值替换之前的值,支持所有数据类型。 first_value:第一个值函数检索数据集中的第一个空值,支持所有数据类型。 first_non_null_value:非空第一个值函数选择数据集中的第一个非空值,支持所有数据类型。
  • 慢查询参数说明 表2 慢查询参数说明 参数名称 参数说明 查询id 内部生成的唯一ID。 查询语句 具体慢查询的SQL语句。 开始时间 执行慢查询SQL语句的开始时间。 结束时间 执行慢查询SQL语句的结束时间。 数据库 慢查询语句中表所在的数据库名称。 实例名称 仅在“正在进行的慢查询”页签显示,表示执行当前慢SQL查询任务的FE实例节点。 占用的内存空间 仅在“已经结束的查询”页签显示,执行慢SQL消耗的内存空间大小,单位是字节。 查询时长 慢查询SQL语句当前累计执行的时间,单位是秒。 用户 执行慢查询SQL语句的Doris用户。 客户端IP 提交该慢查询SQL语句的客户端IP。 状态 慢查询SQL语句的执行状态,包括: 正在运行:正在运行的慢查询SQL语句。 已取消:在“正在进行的慢查询”页签中单击慢查询SQL语句“操作”列的“终止”,即可结束对应慢查询SQL语句。 已结束:已经正常运行完成的慢查询SQL语句。 操作 仅在“正在进行的慢查询”页签显示,表示当前查询出来的慢SQL语句,可以单击“终止”结束该慢SQL语句查询。
  • 操作场景 Doris作为一个ROLAP模式的数据库,底层需依赖强大的关系型数据库引擎作为支撑。高并发、聚合查询等是常见的查询场景,但由于MRS Doris不支持慢查询管理,缺少运维监控能力,在实际问题定界过程中无法可视化地获取查询SQL的执行信息。因此需要新增Doris慢查询管理功能来提高Doris的运维监控能力。 需开启Doris慢查询功能才能在Manager界面可视化显示并管理Doris慢查询信息。默认情况下,为了减少慢查询对环境资源的影响,Doris慢查询功能是关闭的,可通过配置自定义参数“query_history_enable”开启该功能。 该功能仅适用于MRS 3.5.0及之后版本集群。
  • 设置Hive动态分区表精准拦截 针对涉及动态分区的自读自写场景,由于动态分区在编译阶段获取不到输出的分区信息,无法判断是否存在自读自写场景,为了实现拦截功能,提供了nonstrict和strict两种拦截模式供用户选择。其中: nonstrict模式是按照表进行拦截的,即对提交的SQL任务判断是否存在查询的表和写入的表是同一张表,如果存在就进行拦截,否则不拦截。nonstrict模式的拦截逻辑是在SQL编译阶段完成的,该模式优点是拦截效率高,缺点是查询和写入分区所对应的表相同,分区不同时也会被拦截。 strict模式是按照分区进行拦截的,即对提交的SQL任务判断是否存在查询的分区和写入的分区相同,如果存在就进行拦截,否则不拦截。strict模式的拦截逻辑是在SQL任务执行MoveTask阶段完成的,该模式优点是拦截精度高,缺点是拦截成本高,因为需要等到SQL任务大部分逻辑运行完且运行到MoveTask阶段才识别是否需要进行拦截。
  • GBase与HetuEngine数据类型映射 表3 GBase与HetuEngine数据类型映射 GBase类型 HetuEngine类型 TINYINT TINYINT SMALLINT SMALLINT INTEGER INTEGER BIGINT BIGINT DOUBLE DOUBLE FLOAT REAL DECIMAL(p, s) DECIMAL(p, s) CHAR(n) CHAR(n) VARCHAR(n) VARCHAR(n) TEXT VARCHAR(65535) BLOB, LONGBLOB VARBINARY DATE DATE TIME TIME DATETIME TIMESTAMP(6) TIMESTAMP(n) TIMESTAMP(n)
  • 前提条件 数据源与HetuEngine集群节点网络互通。 在HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射。 集群已启用Kerberos认证(安全模式)创建HetuEngine管理员用户,集群未启用Kerberos认证(普通模式)创建HetuEngine业务用户,并为其赋予HDFS管理员权限,即创建用户时需同时加入“hadoop”和“hadoopmanager”用户组,创建用户可参考创建HetuEngine权限角色。 已创建HetuEngine计算实例,可参考创建HetuEngine计算实例。 已获取GBase数据库所在的IP地址,端口号,用户名及密码。
  • 回答 HetuEngine的Ranger权限控制中包含了function的权限控制。当独立部署Hive数据源集群的视图所有者在本集群没有同名用户时,在Ranger中配置function权限将无法为对应用户赋权。可参考添加HetuEngine的Ranger访问权限策略章节通过如下方案为用户添加相关权限解决: 方案一 在本集群创建一个视图所有者的同名用户,然后修改HetuEngine的Ranger访问权限策略中的all-function策略: 在“Allow Condition”的“Select User”中填写授权的视图所有者。 在“Permissions”勾选“Grant”和“execute”。 方案二 直接修改HetuEngine的Ranger访问权限策略中的all-function策略,让所有用户都具备如下权限: 在“Allow Condition”的Select User”中选择“{USER}”。 在“Permissions”勾选“Grant”和“execute”。 此时,如果需要对特定的用户进行function权限控制,可以通过“Deny Conditions”进行配置: 在“Select User”选择用户。 在“Permissions”勾选“Grant”和“execute”,表示禁止该用户function的Grant和execute权限。
  • 问题 HetuEngine的业务SQL运行过程中,出现如下报错: Encountered too many errors talking to a worker node. The node may have crashed or be under too much load. This is probably a transient issue, so please retry your query in a few minutes
共100000条