华为云用户手册

  • 步骤一:(可选)跨境申请 中国大陆区的VPC需要与中国大陆区外的VPC进行通信时,先要进行跨境申请,提交您的基本资料,保障跨境业务的安全性。 本示例为华为云区域A(中国大陆-华北-北京四)内的 虚拟私有云VPC -A与在华为云区域B(中国大陆-华东-上海一)内的虚拟私有云VPC-B进行通讯,均属于中国大陆区,因此无需操作本步骤。 进入带宽包管理列表页面。 在带宽包管理页面,单击“立即申请”。 如果您业务主体的注册地址在中国大陆,请单击此处进入中国联通跨境云服务在线申请页面。 如果您业务主体的注册地址在中国大陆之外,请单击此处进入中国联通跨境云服务在线申请页面。 请根据您实际业务主体的注册地址来选取跨境资质申请地址。 在跨境云服务在线申请页面,选择“申请人类型”,然后根据提示配置相关参数,并上传相关材料。 请根据实际申请页面完成跨境资质申请材料的准备和上传。 表6 跨境云服务在线申请 参数 说明 客户名称 必须与《信息安全承诺书》中的“用户名称”保持一致。 华为云ID 指用户在华为云管理控制台的“账号ID”,从控制台获取账号ID的步骤如下: 登录管理控制台。 鼠标悬停在右上角的用户名,选择下拉列表中的“我的凭证”。 在“API凭证”页面的项目列表中查看并获取账号ID。 客户类型 根据企业类型选择。 经营范围 概括描述主营业务即可。 客户企业规模(人数) 仅做备案参考。 客户所属国家 申请跨境业务的主体所在国家。 客户境内外分公司所在国家 根据企业实际情况填写。 客户统一社会信用代码 - 客户法人 - 法人证件类型 - 法人证件号 - 跨境需求带宽(M) 仅做备案参考。 跨境服务生效时间 仅做备案参考。 跨境服务终止时间 仅做备案参考。 客户联系人 - 客户联系人电话 - 联系人证件类型 - 联系人证件号 - 表7 跨境申请材料 参数 说明 具体申请材料说明 签字 盖章(企业公章) 营业执照 请上传加盖过公章的营业执照照片。 盖章位置请参考相应的模板文件。 营业执照扫描件 - √ 业务协议 请下载《华为云服务跨境专线业务服务协议》后,填写签字盖章后上传扫描件。 请在签字栏处签字。 盖章需覆盖签名。 《华为云服务跨境专线业务服务协议》扫描件 √ √ 信息安全承诺书 下载《信息安全承诺书模板》 后,填写签字盖章后上传扫描件。 请在签字栏处签字。 盖章需覆盖签名。 该材料中需要填写公司名称、带宽值,带宽值可按照初始预估值填写。 《中国联通专线业务信息安全承诺书》扫描件 √ √ 联系人身份证正反面 请上传清晰的加盖公章的联系人身份证正反面。 盖章位置请参考相应的模板文件。 联系人身份证正反面 - √ 联系人授权委托书 下载《联系人授权委托书模板》 后,填写签字盖章后上传扫描件。 盖章位置请参考相应的模板文件。 《跨境业务办理授权书》扫描件 - √ 单击“立即申请”。 提交之后跨境申请的状态为“审核中”,审核需要1个工作日,当状态为“已授权”时,显示跨境申请完成。
  • 步骤二:(可选) 创建VPC和E CS 您需要参考以下操作,创建虚拟私有云VPC和弹性 云服务器ECS 。如果您已有VPC和ECS资源,则可以不用执行本章节操作。 约束与限制 VPC网段(CIDR)不能重叠。 重叠的VPC网段会导致路由冲突,如果您已有的VPC存在网段重叠,则需要修改网段。 本示例中VPC-A和VPC-B的ECS位于不同的安全组,需要在安全组中添加规则放通网络,本示例中需要放通的安全组规则详情请参见添加安全组规则。 操作步骤
  • 步骤四:加载网络实例 被授权用户根据规划的网络连通情况,将需要进行互通的VPC实例加载到创建的云连接实例中。 本示例中将VPC-A和VPC-B分别加载至云连接实例cc-test中,这里需要登录账号A操作,具体操作如下: 首先加载账号A的VPC-A。 进入云连接实例列表页面。 单击目标云连接实例名称,进入基本信息页面。 单击“网络实例”页签。 单击“加载网络实例”,在弹出的对话框中加载同账号网络实例。 根据表7填写对应参数后,单击“确定”。 图5 加载账号A的VPC-A实例 表7 加载同账号网络实例参数 参数 说明 取值样例 账号 加载的网络实例的账号类型。 同账号 区域 需要连接的VPC所在区域。 华东-上海一 实例类型 需要加载到云连接实例中实现互通的实例类型。包括: 虚拟私有云(VPC) 虚拟网关(VGW) 虚拟私有云(VPC) VPC 需要加载到云连接实例中实现网络互通的VPC名称。 当实例类型参数选择虚拟私有云时,需要配置此参数。 VPC-A VPC CIDRs 需要加载到云连接实例中实现网络互通的VPC内的网段路由。 当实例类型参数选择虚拟私有云时,需配置以下两个参数: 子网 其他网段:其中包含自定义网段的配置 Subnet-A 备注 加载同账号网络实例备注信息。 - 然后加载已获得账号B授权的VPC-B。 进入云连接实例列表页面。 单击目标云连接实例名称,进入基本信息页面。 单击“网络实例”页签。 单击“加载网络实例”,在弹出的对话框中选择跨账号加载。 根据表8填写对应参数后,单击“确定”。 表8 加载跨账号网络实例参数 参数 说明 取值样例 账号 加载的网络实例的账号类型。 跨账号 对方账号ID VPC所属账号的ID。 账号B的ID 区域 需要连接的VPC所在区域。 华东-上海一 对方项目ID VPC所属账号的所在项目ID。 账号B的项目ID 实例类型 需要加载到云连接实例中实现互通的实例类型。 VPC 对方VPC ID 需要加载的VPC ID。 VPC-B的ID VPC CIDRs 需要加载到云连接实例中实现网络互通的网段路由。 Subnet-B 备注 加载跨账号网络实例备注信息。 - 一个网络实例只可以加载到一个云连接实例中。 VPC实例和与其关联的虚拟网关实例,不允许重复加载。
  • 步骤三:跨账号授权网络实例 如果您的网络规划涉及与其他用户通信,您需要对其他云连接用户授权网络实例,其他云连接用户可以加载您授权的网络实例到自己的云连接服务中,您和对方的网络会实现互通,请谨慎操作。 本示例中需要将账号B的VPC-B授权给账号A,这里需要登录账号B的云连接服务操作,具体操作如下: 进入跨账号授权管理页面。 在“授权网络实例”页面,单击“授权”。 在弹出的对话框中,根据表6填写对应参数。 图4 云连接实例跨账号授权 表6 云连接实例跨账号授权参数 参数 说明 取值样例 区域 虚拟私有云所在区域。 华东-上海一 虚拟私有云 需要向对方授权的虚拟私有云。 VPC-B 对方账号ID 被授权方的账号ID。 账号A的ID 对方云连接实例ID 需要加载到被授权方云连接中的云连接实例ID。 账号A中创建的云连接实例cc-test的ID 备注 跨账号授权的备注信息。 - 单击“确定”,已成功授权账号A可以访问账号B下的VPC-B实例资源。
  • 步骤一:创建云连接实例 本示例中可以在账号A中创建一个云连接实例cc-test。 进入云连接实例列表页面。 单击页面右上方的“创建云连接”。 在弹出的对话框中根据表5填写对应参数。 图3 创建云连接实例 表5 创建云连接实例参数 参数 说明 取值样例 名称 云连接实例的名称。 长度为1~64个字符,中、英文字母,数字,下划线,中划线,点。 cc-test 企业项目 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。 default 使用场景 选择虚拟私有云场景时,网络实例类型支持选择虚拟私有云(VPC)和虚拟网关(VGW)。 虚拟私有云 标签 云连接实例的标识,包括键和值。可以为云连接实例创建20个标签。 说明: 如果已经通过TMS的预定义标签功能预先创建了标签,则可以直接选择对应的标签键和值。 预定义标签的详细内容,请参见预定义标签简介。 - 描述 云连接实例的描述。 长度为0~255个字符。 - 单击“确定”,完成云连接实例的创建。
  • 操作流程 表4 不同账号下同区域VPC互通流程说明 操作步骤 说明 准备工作 使用云服务前,您需要 注册华为账号 并开通华为云、完成实名认证、为账户充值。 步骤一:创建云连接实例 在账号A创建一个云连接实例,用于加载VPC实例。 步骤二:(可选) 创建VPC和ECS 在账号A和账号B下分别创建同一区域的虚拟私有云VPC和弹性云服务器ECS。如果您已有VPC和ECS资源,则可以不用执行本操作。 步骤三:跨账号授权网络实例 本示例中需要将账号B的VPC-B授权给账号A。 步骤四:加载网络实例 本示例中将VPC-A和VPC-B分别加载至在账号A中创建的云连接实例。
  • 签名流程 构造待签名数据:"session_token="+sessionToken+"×tamp="+timestamp+"&nonce="+nonce。 其中,timestamp为当前服务器时间戳,可调用获取服务器时间戳接口获取,nonce为随机字符串,每次签名请重新生成,可为当前时间戳的16进制。 获取公钥publicKey,通过调用获取公钥接口获取。 签名算法为RSA公钥加密,填充模式为RSA/ECB/OAEPWithSHA-256AndMGF1Padding,待签名 数据加密 后需要进行Base64编码。
  • 查看ServiceComb引擎信息 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待查看的引擎。 在“ServiceComb引擎信息”区域,查看如表1所示的ServiceComb引擎信息。 表1 引擎详细信息说明 引擎信息名称 信息说明 引擎名称 创建ServiceComb引擎时输入的引擎名称,单击可复制。单击可以修改引擎名称,名称以字母开头,由字母、数字和-组成,且不能以-结尾,长度为3~24个字符。 引擎ID 引擎的ID,单击可复制。 状态 引擎的状态,包括: 创建中 可用 不可用 配置中 删除中 升级中 变更中 创建失败 删除失败 升级失败 变更失败 已冻结 未知 引擎版本 引擎的版本号。 引擎类型 创建ServiceComb引擎时选择的引擎类型。 可用区 创建ServiceComb引擎时选择的可用区。 标签 显示为ServiceComb引擎添加的标签,也可单击“标签管理”,根据需要对标签进行相应操作,具体操作可参见管理ServiceComb引擎标签。 描述 创建ServiceComb引擎时输入的引擎描述信息。
  • 管理标签 新增和修改标签会影响Nacos引擎业务十秒左右,请在业务低峰期时增加或修改。 登录微服务引擎控制台。 在左侧导航栏选择“注册配置中心 ”。 单击待操作的引擎的名称,进入该引擎的详细信息页面。 在“更多设置”区域的“标签”参数处,您可以根据实际需要,执行以下操作: 新增标签 单击“标签管理”,弹出“编辑标签”窗口。 单击“ 新增标签”,您可在输入框分别输入标签键和标签值。 单击“确定”,为实例添加标签成功。 修改标签 单击“标签管理”,弹出“编辑标签”窗口。 您可在原有的输入框中修改标签键与标签值信息。 单击“确定”,标签修改成功。 删除标签 单击标签所在行的,在弹出的确认框中单击“确定”,删除该标签。
  • 管理标签 新增和修改标签会影响引擎业务十秒左右,请在业务低峰期时增加或修改。 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版 ”。 单击待操作的引擎的名称,进入该引擎的详细信息页面。 在“ServiceComb引擎信息”区域的“标签”参数处,您可以根据实际需要,执行以下操作: 新增标签 单击“标签管理”,弹出“编辑标签”窗口。 单击“ 新增标签”,您可在输入框分别输入标签键和标签值。 单击“确定”,为实例添加标签成功。 修改标签 单击“标签管理”,弹出“编辑标签”窗口。 您可在原有的输入框中修改标签键与标签值信息。 单击“确定”,标签修改成功。 删除标签 单击标签所在行的,在弹出的确认框中单击“确定”,删除该标签。
  • 查看应用网关信息 登录微服务引擎控制台。 在左侧导航栏选择“应用网关”。 在实例列表页面,可查看实例“运行状态”。 实例的状态包括: 创建中 可用 不可用 配置中 删除中 升级中 变更中 创建失败 删除失败 升级失败 变更失败 未知(即实例处于未知状态) 单击待查看的实例名称。 只有实例运行状态为“可用”才可单击实例名称进入基础信息页面。 查看如表1所示的应用网关信息。 表1 网关详细信息说明 信息类型 参数 说明 基础信息 名称 创建应用网关时输入的实例名称,单击可复制。单击可以修改网关名称,名称以字母开头,由字母、数字和-组成,且不能以-结尾,长度为3~24个字符。 ID 引擎的ID,单击可复制。 企业项目 创建应用网关时选择的企业项目。 计费方式 创建应用网关时选择的计费方式。 版本 创建的应用网关的版本号。 容量规格 创建应用网关时选择的规格,当网关为小规格时,可单击右侧的“扩容”对网关规格扩容,具体操作请参考扩容应用网关。 节点数 创建应用网关时选择的节点数量。 运行状态 实例的状态。 创建时间 创建应用网关的时间。 可用区 创建应用网关的选择的可用区。 连接信息 内网地址 当创建的负载均衡器开通了IPv4私网,则会显示内网地址。 公网地址 当创建的负载均衡器开通了IPv4公网,则会显示公网地址。 虚拟私有云 创建应用网关时选择的虚拟私有云。 子网 创建应用网关时选择的子网。 负载均衡器名称 创建应用网关时选择的负载均衡器名称,可单击名称进入负载均衡器详细信息页面。 负载均衡器ID 创建应用网关时选择的负载均衡器ID,单击可复制。 访问端口 应用网关的访问端口,默认是支持80和443,也可自定义端口,具体操作请参考编辑访问端口。 负载均衡器 负载均衡器名称/ID 创建应用网关时选择的负载均衡器,可单击负载均衡器ID后的复制。 内网地址 当创建的负载均衡器开通了IPv4私网,则在“内网地址”列显示内网地址。 公网地址 当创建的负载均衡器开通了IPv4公网,则在“公网地址”列显示公网地址。 操作 可对创建应用网关时选择的ELB进行解绑或绑定多个ELB操作。具体操作请参考绑定/解绑负载均衡器。 更多设置 维护时间窗 运维操作时间。单击参数后的可以修改时间窗。具体操作请参考修改应用网关维护时间窗。 标签 显示为应用网关添加的标签,也可单击“标签管理”,根据需要对标签进行相应操作,具体操作可参见管理应用网关标签。
  • 管理标签 新增和修改标签会影响网关业务十秒左右,请在业务低峰期时增加或修改。 登录微服务引擎控制台。 在左侧导航栏选择“应用网关 ”。 单击待查看的实例的名称,进入该实例的基本信息页面。 在“更多设置”区域的“标签”参数处,您可以根据实际需要,执行以下操作: 新增标签 单击“标签管理”,弹出“编辑标签”窗口。 单击“ 新增标签”,您可在输入框中分别输入标签键和标签值。 单击“确定”,为实例添加标签成功。 修改标签 单击“标签管理”,弹出“编辑标签”窗口。 您可在原有的输入框中修改标签键与标签值信息。 单击“确定”,标签修改成功。 删除标签 单击标签所在行的,在弹出的确认框中单击“确定”,删除该标签。
  • 处理方法 执行以下命令,排查磁盘的物理空间是否已满。 df -h 图1 检查磁盘物理空间 如图1所示,磁盘空间还有剩余,排除物理磁盘空间已满的情形 执行以下命令,查看系统可用的inode节点使用率。 df -i 当结果中的Use%为100%时则为inode耗尽,可以执行以下的操作步骤释放inode。 执行以下命令,将所有在目录文件进行归档。 tar czvf /tmp/backup.tar.gz /home/data 删除对应目录下确认不需要的文件释放inode。
  • PG_RELFILENODE_SIZE PG_RELFILENODE_SIZE系统表存储文件级空间统计信息,表中的每一条记录对应磁盘上相应的物理文件和该文件的文件大小。 表1 PG_RELFILENODE_SIZE字段 名称 类型 描述 databaseid oid 物理文件所属database对应的OID。如果是跨库共享系统表,该值为0。 tablespaceid oid 物理文件所属表空间对应的OID。 relfilenode oid 物理文件的物理文件编号。 backendid integer 创建物理文件的后台线程号,通常为-1。 type integer 物理文件的文件类型。 0为数据类型。 1为FSM文件类型。 2为VM文件类型。 3为BCM文件类型。 大于4为列存表对应列的数据文件和BCM文件大小之和。 filesize bigint 物理文件的文件大小,单位为Byte。 父主题: 系统表
  • 注意事项 禁止一条SQL语句中,出现重复子查询语句。 尽量少用标量子查询(标量子查询指结果为1个值,并且条件表达式为等值的子查询)。 避免在SELECT目标列中使用子查询,可能导致计划无法下推影响执行性能。 子查询嵌套深度建议不超过2层。由于子查询会带来临时表开销,过于复杂的查询应考虑从业务逻辑上进行优化。 子查询可以在 SELECT 语句中嵌套其他查询,从而实现更复杂的查询。子查询还可以在WHERE子句中使用其他查询的结果,从而更好地过滤数据。但是子查询可能会导致查询性能问题和代码难阅读和理解。 所以在 GaussDB 等数据库中使用SQL子查询时,请结合实际业务情况进行操作。
  • 示例 创建学生信息表student(ID、姓名、性别、学校)。 1 2 3 4 5 6 7 SET current_schema=public; DROP TABLE IF EXISTS student; CREATE table student( sId VARCHAR(10) NOT NULL, sname VARCHAR(10) NOT NULL, sgender VARCHAR(10) NOT NULL, sschool VARCHAR(10) NOT NULL); 给表student插入数据。 1 2 3 4 5 6 7 8 INSERT INTO student VALUES('s01' , 'ZhaoLei' , 'male', 'NENU'); INSERT INTO student VALUES('s02' , 'QianDian' , 'male', 'SJTU'); INSERT INTO student VALUES('s03' , 'SunFenng' , 'male', 'Tongji'); INSERT INTO student VALUES('s04' , 'LIYun' , 'male', 'CCOM'); INSERT INTO student VALUES('s05' , 'ZhouMei' , 'female', 'FuDan'); INSERT INTO student VALUES('s06' , 'WuLan' , 'female', 'WHU'); INSERT INTO student VALUES('s07' , 'ZhengZhu' , 'female', 'NWAFU'); INSERT INTO student VALUES('s08' , 'ZhangShan' , 'female', 'Tongji'); 查看表student。 1 SELECT * FROM student; 回显如下: 创建教师信息表teacher(ID、姓名、性别、学校)。 1 2 3 4 5 6 DROP TABLE IF EXISTS teacher; CREATE table teacher( tid VARCHAR(10) NOT NULL, tname VARCHAR(10) NOT NULL, tgender VARCHAR(10) NOT NULL, tschool VARCHAR(10) NOT NULL); 给表teacher插入数据。 1 2 3 INSERT INTO teacher VALUES('t01' , 'ZhangLei', 'male', 'FuDan'); INSERT INTO teacher VALUES('t02' , 'LiLiang', 'male', 'WHU'); INSERT INTO teacher VALUES('t03' , 'WangGang', 'male', 'Tongji'); 查询表teacher。 1 SELECT * FROM teacher; 使用UNION(合并且去重)获取学生和教师所在学校,并按学校名称首字母升序排序。 1 2 3 4 5 6 7 8 SELECT t.school FROM ( SELECT sschool AS school FROM student UNION SELECT tschool AS school FROM teacher ) t ORDER BY t.school ASC; 回显如下: 使用UNION ALL(合并不去重)获取所有学生和教师所在学校,并按学校名称首字母升序排序。 1 2 3 4 5 6 7 8 SELECT t.school FROM ( SELECT sschool AS school FROM student UNION ALL SELECT tschool AS school FROM teacher ) t ORDER BY t.school ASC; 使用UNION ALL(合并带有WHERE子句SQL结果集)获取来自“Tongji”的学生和教师的所有信息,并按学生和教师的编号升序排序。 1 2 3 4 5 6 7 8 9 10 SELECT t.* FROM ( SELECT Sid AS id,Sname AS name,Sgender AS gender,Sschool AS school FROM student WHERE Sschool='Tongji' UNION ALL SELECT Tid AS id,Tname AS name,Tgender AS gender,Tschool AS school FROM teacher WHERE Tschool='Tongji' ) t ORDER BY t.id ASC;
  • 使用场景 查询全库所有用户表的整体脏页率: 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 select t1.schema, t1.tablename, t1.total_ins, t1.total_upd, t1.total_del, t1. total_tup_hot_upd, t1.total_change, t1.total_live, t1.total_dead, t1.total_dirty_rate, t1.max_dirty, t2.max_node, t1.min_dirty, t2.min_node from (select a.schema, a.tablename, sum(a.n_tup_ins) as total_ins, sum(a.n_tup_upd) as total_upd, sum(a.n_tup_del) as total_del, sum(a.n_tup_hot_upd) as total_tup_hot_upd, sum(a.n_tup_change) as total_change, sum(a.n_live_tup) as total_live, sum(a.n_dead_tup) as total_dead, Round((total_dead / (total_dead + total_live + 0.0001) * 100),2) AS total_dirty_rate, max(a.dirty_rate) as max_dirty, min(a.dirty_rate) as min_dirty from pg_catalog.pgxc_stat_table_dirty a where a.partname is null and a.schema not in ('pg_toast','cstore','gs_logical_cluster','sys','dbms_om','information_schema','pg_catalog','dbms_output','dbms_random','utl_raw','utl_raw dbms_sql','dbms_lob') group by a.tablename, a.schema ) t1, (select distinct tablename, schema, first_value(nodename) over(partition by tablename, schema order by dirty_rate) as min_node, first_value(nodename) over(partition by tablename, schema order by dirty_rate desc) as max_node from (select * from pg_catalog.pgxc_stat_table_dirty)) t2 where t1.tablename = t2.tablename and t1.schema = t2.schema; 查询全库所有表(用户表+系统表)的整体脏页率: 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 select t1.schema, t1.tablename, t1.total_ins, t1.total_upd, t1.total_del, t1. total_tup_hot_upd, t1.total_change, t1.total_live, t1.total_dead, t1.total_dirty_rate, t1.max_dirty, t2.max_node, t1.min_dirty, t2.min_node from (select a.schema, a.tablename, sum(a.n_tup_ins) as total_ins, sum(a.n_tup_upd) as total_upd, sum(a.n_tup_del) as total_del, sum(a.n_tup_hot_upd) as total_tup_hot_upd, sum(a.n_tup_change) as total_change, sum(a.n_live_tup) as total_live, sum(a.n_dead_tup) as total_dead, Round((total_dead / (total_dead + total_live + 0.0001) * 100),2) AS total_dirty_rate, max(a.dirty_rate) as max_dirty, min(a.dirty_rate) as min_dirty from pg_catalog.pgxc_stat_table_dirty a where a.partname is null group by a.tablename, a.schema ) t1, (select distinct tablename, schema, first_value(nodename) over(partition by tablename, schema order by dirty_rate) as min_node, first_value(nodename) over(partition by tablename, schema order by dirty_rate desc) as max_node from (select * from pg_catalog.pgxc_stat_table_dirty)) t2 where t1.tablename = t2.tablename and t1.schema = t2.schema; 查询全库系统表信息: 1 select * from pgxc_stat_table_dirty where schema in ('pg_toast','cstore','gs_logical_cluster','sys','dbms_om','information_schema','pg_catalog','dbms_output','dbms_random','utl_raw','utl_raw dbms_sql','dbms_lob');
  • 对结果进行排序 使用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)
  • 限制结果查询数量 如果需要查询只返回部分结果,可以使用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
  • 多表查询中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;
  • 优化后 可将查询可以修改为: 1 SELECT * FROM t1 WHERE NOT EXISTS (SELECT * FROM t2 WHERE t2.c = t1.c); 执行下列语句,查询NOT EXISTS的执行计划: 1 EXPLAIN VERBOSE SELECT * FROM t1 WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t2.c = t1.c);
  • MPP_TABLES MPP_TABLES视图显示PGXC_CLASS中的表信息。 表1 MPP_TABLES字段 名称 类型 描述 schemaname name 包含表的模式名。 tablename name 表名。 tableowner name 表的所有者。 tablespace name 表所在的表空间。 pgroup name 节点群的名称。 nodeoids oidvector_extend 表分布的节点OID列表。 父主题: 系统视图
  • GaussDB(DWS)字符串加解密 GaussDB(DWS)支持使用以下函数对字符串进行加解密。 gs_encrypt(encryptstr, keystr, cryptotype, cryptomode, hashmethod) 描述:采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。支持的cryptotype:aes128, aes192, aes256, sm4。支持的cryptomode:cbc。支持的hashmethod:sha256, sha384, sha512, sm3。支持的加密数据类型:目前数据库支持的数值类型,字符类型,二进制类型中的RAW,日期/时间类型中的DATE、TIMESTAMP、SMALLDATETIME。keystr的长度范围与加密算法相关,为1~KeyLen字节。当cryptotype为aes128和sm4时,KeyLen为16,aes192时KeyLen为24,aes256时KeyLen为32。 返回值类型:text 返回值长度:至少为 4*[(maclen + 56)/3] 字节,不超过 4*[(Len + maclen + 56)/3] 字节,其中Len为加密前数据长度(单位为字节),maclen为HMAC值的长度,当hashmethod为sha256和sm3时maclen为32,sha384时maclen为48,sha512时maclen为64。即当hashmethod为sha256和sm3时,返回值长度至少为120字节,不超过4*[(Len + 88)/3] 字节;当hashmethod为sha384时,返回值长度至少为140字节,不超过4*[(Len + 104)/3] 字节;当hashmethod为sha512时,返回值长度至少为160字节,不超过4*[(Len + 120)/3] 字节; 示例: 1 2 3 4 5 SELECT gs_encrypt('GaussDB(DWS)', '1234', 'aes128', 'cbc', 'sha256'); gs_encrypt -------------------------------------------------------------------------------------------------------------------------- AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA== (1 row) 由于该函数的执行过程需要传入解密口令,为了安全起见,gsql工具不会将该函数记录入执行历史。即无法在gsql里通过上下翻页功能找到该函数的执行历史。 在同一张数据表中,加密函数ge_encrypt与gs_encrypt_aes128不要混合使用。 gs_decrypt(decryptstr, keystr,cryptotype, cryptomode, hashmethod) 描述:采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。keystr不得为空。 返回值类型:text 示例: 1 2 3 4 5 SELECT gs_decrypt('AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA==', '1234', 'aes128', 'cbc', 'sha256'); gs_decrypt -------------- GaussDB(DWS) (1 row) 由于该函数的执行过程需要传入解密口令,为了安全起见,gsql工具不会将该函数记录入执行历史。即无法在gsql里通过上下翻页功能找到该函数的执行历史。 此函数需要结合gs_encrypt加密函数共同使用,且加密算法和HMAC算法要保证一致。 gs_encrypt_aes128(encryptstr,keystr) 描述:以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。keystr的长度范围为1~16字节。支持的加密数据类型:目前数据库支持的数值类型,字符类型,二进制类型中的RAW,日期/时间类型中的DATE、TIMESTAMP、SMALLDATETIME。 返回值类型:text 返回值长度:至少为92字节,不超过 4*[(Len+68)/3] 字节,其中Len为加密前数据长度(单位为字节)。 示例: 1 2 3 4 5 SELECT gs_encrypt_aes128('DWS','1234'); gs_encrypt_aes128 ---------------------------------------------------------------------------------------------- MGFX/AvA69PvS6wgZMtEAwNdjf/lMM6b7pIY5miAAkS0cf3m5mKl8iNe1BKDVqTvgZEEoMTycVVE+tHF69uHYznXyhs= (1 row) 由于该函数的执行过程需要传入解密口令,为了安全起见,gsql工具不会将该函数记录入执行历史。即无法在gsql里通过上下翻页功能找到该函数的执行历史。 在同一张数据表中,加密函数gs_encrypt_aes128与ge_encrypt不要混合使用。 gs_decrypt_aes128(decryptstr,keystr) 描述:以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。keystr不得为空。 返回值类型:text 示例: 1 2 3 4 5 SELECT gs_decrypt_aes128('MGFX/AvA69PvS6wgZMtEAwNdjf/lMM6b7pIY5miAAkS0cf3m5mKl8iNe1BKDVqTvgZEEoMTycVVE+tHF69uHYznXyhs=','1234'); gs_decrypt_aes128 ------------------- DWS (1 row) 由于该函数的执行过程需要传入解密口令,为了安全起见,gsql工具不会将该函数记录入执行历史。即无法在gsql里通过上下翻页功能找到该函数的执行历史。 此函数需要结合gs_encrypt_aes128加密函数共同使用。 gs_hash(hashstr, hashmethod) 描述:以hashmethod算法对hashstr字符串进行信息摘要,返回信息摘要字符串。支持的hashmethod:sha256, sha384, sha512, sm3。 返回值类型:text 返回值长度:sha256和sm3返回64字节,sha384返回96字节,sha512返回128字节。 示例: 1 2 3 4 5 SELECT gs_hash('GaussDB(DWS)', 'sha256'); gs_hash -------------------------------------------------------------------------------------------------- e59069daa6541ae20af7c747662702c731b26b8abd7a788f4d15611aa0db608efdbb5587ba90789a983f85dd51766609 (1 row) md5(string) 描述:将string使用MD5加密,并以16进制数作为返回值。 MD5的安全性较低,不建议使用。 返回值类型:text 示例: 1 2 3 4 5 SELECT md5('ABC'); md5 ---------------------------------- 902fbdd2b1df0c4f70b4a5d23525e932 (1 row) 父主题: GaussDB(DWS)敏感数据管理
  • 大小写不敏感排序规则支持 从集群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优化。
  • 排序规则组合原则 当表达式的collation未指定时,则认为是默认的排序规则default,它表示数据库的区域设置。表达式的collation也可能是不确定的,此时,排序操作和其他不确定的排序规则的操作就会失败。 对于函数或操作符调用,其排序规则将通过检查所有参数的collation来决定。如果该函数或操作符调用的结果是一种可排序的数据类型,若有外层表达式要用到排序规则,那么该外层的表达式将继承对应函数和操作符所调用结果集的排序规则。 表达式的排序规则派生可以是显式或隐式。该区别会影响多个不同的排序规则出现在同一个表达式中时如何对collation进行组合。当执行语句使用COLLATE子句时,将发生显式派生,否则为隐式派生。当多个排序规则组合时,规则如下: 如果输入表达式中存在显式COLLATE派生,则在输入表达式之间的所有显式派生的COLLATE必须相同,否则将产生冲突错误。如果存在显式COLLATE,那它就是排序规则组合的结果。 如果不存在显式COLLATE,那所有输入表达式必须具有相同的隐式COLLATE或默认COLLATE。如果存在非默认COLLATE,那它就是排序规则组合的结果。否则,结果是默认COLLATE。 如果在输入表达式之间存在多个冲突的非默认COLLATE,则组合被认为是具有不确定排序规则,这并非一种错误。如果被调用的函数或表达式需要用到排序规则,运行时将产生排序规则未知的错误。 CASE表达式中,比较行为使用的规则以WHEN子句中的COLLATE设置为准。 显示COLLATE的派生仅在当前查询(CTE或SUBQUERY)中生效,查询外则降为隐式派生。
  • 示例 语句中显示指定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指定字符类型为大小写不敏感后,性能较使用前会有所下降,因此性能敏感场景需谨慎评估后使用。
  • 概述 一种可排序数据类型的每一种表达式都有一个排序规则(系统内部的可排序数据类型可以是text、varchar和char等字符类型。用户定义的基础类型也可以被标记为可排序的,并且在一种可排序数据类型上的域也是可排序的)。如果该表达式是一个列引用,该表达式的排序规则就是列所定义的排序规则。如果该表达式是一个常量,排序规则就是该常量数据类型的默认排序规则。更复杂表达式的排序规则根据其输入的排序规则得来。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全