华为云用户手册

  • U CS 服务资源权限 默认情况下,管理员创建的 IAM 用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 UCS部署时不区分物理区域,为全局级服务。授权时,在全局级服务中设置权限,访问UCS时,不需要切换区域。 权限根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于各云服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对UCS服务,管理员能够控制IAM用户仅能对某一类舰队和集群资源进行指定的管理操作。 表1包括了UCS的所有系统权限。 表1 UCS系统权限 系统角色/策略名称 描述 类别 UCS FullAccess UCS服务管理员权限,拥有该权限的用户拥有服务的所有权限(包含制定权限策略、安全策略等)。 系统策略 UCS CommonOperations UCS服务基本操作权限,拥有该权限的用户可以执行创建工作负载、流量分发等操作。 系统策略 UCS CIAOperations UCS服务容器智能分析管理员权限。 系统策略 UCS ReadOnlyAccess UCS服务只读权限(除容器智能分析只读权限)。 系统策略 华为云各服务之间存在业务交互关系,UCS也依赖其他云服务实现一些功能(如镜像仓库、 域名 解析),因此,上述四种系统策略经常和其他云服务的角色或策略结合使用,以达到精细化授权的目的。管理员在为IAM用户授权时,应该遵循权限最小化的安全实践原则,表2列举了UCS各功能管理员、操作、只读权限所需要的最小权限。 表2 UCS功能所需的最小权限 功能 权限类型 权限范围 最小权限 容器舰队 管理员权限 创建、删除舰队 注册华为云集群(CCE集群、 CCE Turbo 集群)、本地集群或附着集群 注销集群 将集群加入、移出舰队 为集群或舰队关联权限 开通集群联邦、联邦管理相关操作(如创建联邦工作负载、创建域名访问等) UCS FullAccess 只读权限 查询集群、舰队的列表或详情 UCS ReadOnlyAccess 华为云集群 管理员权限 对华为云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的读写权限。 UCS FullAccess + CCE Administrator 操作权限 对华为云集群及集群下大多数Kubernetes资源对象的读写权限,对命名空间、资源配额等Kubernetes资源对象的只读权限。 UCS CommonOperations + CCE Administrator 只读权限 对华为云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的只读权限。 UCS ReadOnlyAccess + CCE Administrator 本地/附着/多云/伙伴云集群 管理员权限 本地/附着/多云/伙伴云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的读写权限。 UCS FullAccess 操作权限 本地/附着/多云/伙伴云集群及集群下大多数Kubernetes资源对象的读写权限,对命名空间、资源配额等Kubernetes资源对象的只读权限。 UCS CommonOperations + UCS RBAC权限(需要包含namespaces资源对象的list权限) 只读权限 本地/附着/多云/伙伴云集群及集群下所有Kubernetes资源对象(包含节点、工作负载、任务、服务等)的只读权限。 UCS ReadOnlyAccess + UCS RBAC权限(需要包含namespaces资源对象的list权限) 镜像仓库 管理员权限 容器镜像服务 的所有权限,包括创建组织、上传镜像、查看镜像列表或详情、下载镜像等操作。 SWR Administrator 权限管理 管理员权限 创建、删除权限 查看权限列表或详情 说明: 创建权限需要同时授予子用户IAM ReadOnlyAccess权限(IAM服务的只读权限),用于获取IAM用户列表。 UCS FullAccess + IAM ReadOnlyAccess 只读权限 查看权限列表或详情 UCS ReadOnlyAccess + IAM ReadOnlyAccess 策略中心 管理员权限 启用策略中心 创建、停用策略实例 查看策略列表 查看策略实施详情 UCS FullAccess 只读权限 对于已启用策略中心的舰队和集群,拥有该权限的用户可以查看策略列表和查看策略实施详情。 UCS CommonOperations 或 UCS ReadOnlyAccess 服务网格 管理员权限 应用服务网格的所有权限,包括创建网格、添加集群、sidecar注入、查看网格列表或详情、卸载网格等。 CCE Administrator 流量分发 管理员权限 创建流量策略、暂停调度策略、删除调度策略等操作。 (推荐)UCS CommonOperations + DNS Administrator 或 UCS FullAccess + DNS Administrator 只读权限 查看流量策略列表或详情 UCS ReadOnlyAccess + DNS Administrator 容器智能分析 管理员权限 接入、取消接入集群 查看基础设施、应用负载等多维度监控数据 UCS CIAOperations 云原生服务中心 管理员权限 云原生服务中心的所有权限,包括订阅服务、查看服务列表或详情、创建服务实例、查看实例列表或详情、删除服务实例、退订服务等操作。 UCS FullAccess 只读权限 云原生服务中心的只读权限,包括查看服务列表或详情、查看实例列表或详情等操作。 UCS ReadOnlyAccess
  • UCS权限类型 UCS权限管理是在IAM与Kubernetes的角色访问控制(RBAC)的能力基础上,打造的细粒度权限管理功能。支持UCS服务资源权限、集群中Kubernetes资源权限两种维度的权限控制,这两种权限针对的是不同类型的资源,在授权机制上也存在一些差异,具体如下: UCS服务资源权限:是基于IAM系统策略的授权。UCS服务资源包括容器舰队、集群、联邦实例等等,管理员可以针对用户的角色(如开发、运维)进行差异化授权,精细控制他们对UCS资源的使用范围。 集群中Kubernetes资源权限:是基于Kubernetes RBAC能力的授权,可授予针对集群内Kubernetes资源对象的细化权限,通过权限设置可以让不同的用户有操作不同Kubernetes资源对象的权限(如工作负载、任务、服务等Kubernetes原生资源)。 如果您的团队主要使用UCS服务资源,那么IAM系统策略能够满足您的诉求;如果还需要集群内各个Kubernetes资源对象的细化权限,则必须结合Kubernetes RBAC一起使用。
  • IPv4/IPv6双栈网络应用场景 如果您的ECS规格支持IPv6网络,那么您可以使用IPv4/IPv6双栈网络。场景示例和资源规划如表1所示。 不同区域、不同可用区支持IPv6双栈的云服务器规格不同。ECS是否支持IPv6双栈,请选择区域、可用区后,以控制台的显示为准,查询方法如下图所示。 图1 查询支持IPv6的ECS规格 当ECS规格列表中包含“IPv6”参数,且取值为“是”时,表示该ECS规格支持IPv6。 规格是否支持IPv6由“可用区”和“规格”两个参数决定。 如果设置“可用区”后,规格列表中不显示“IPv6”参数或参数值为“否”,表示当前规格不支持IPv6。 Flexus应用服务器 L实例 、旧版云耀云服务器不支持IPv6网络。 表1 IPv4/IPv6双栈网络的应用场景及资源规划 应用场景 场景示例 条件 子网网段类型 ECS IPv4内网通信 在ECS上部署应用,需要与其他系统(比如数据库)之间使用IPV4进行内网互访。 实例未绑定弹性公网IP。 IPv4网段 IPv4私网地址:支持IPv4内网通信。 IPv4公网通信 在ECS上部署应用,需要与其他系统(比如数据库)之间使用IPV4进行公网互访。 实例绑定弹性公网IP。 IPv4网段 IPv4私网地址:支持IPv4内网通信。 IPv4公网地址:支持IPv4公网通信。 IPv6内网通信 在ECS上部署应用,需要与其他系统(比如数据库)之间使用IPV6进行内网互访。 VPC的子网开启IPv6。 创建ECS时,网络配置如下: 规格:选择支持IPv6网络的ECS规格。关于ECS哪些规格支持IPv6网络,请参见《弹性云服务器用户指南》 VPC和子网:选择已开启IPv6的子网及子网所属的VPC。 选择“自动分配IPv6地址”。 共享带宽:暂不配置。 IPv4网段 IPv6网段 IPv4私网地址+IPv4 EIP:实例绑定IPv4 EIP,支持IPv4公网通信。 IPv4私网地址:实例不绑定IPv4 EIP,支持IPv4内网通信。 IPv6地址:IPv6地址不加入共享带宽,支持IPv6内网通信。 IPv6公网通信 搭建IPv6网络,使ECS可以访问Internet上的IPv6服务。 VPC的子网开启IPv6。 创建ECS时,网络配置如下: 规格:选择支持IPv6网络的ECS规格。关于ECS哪些规格支持IPv6网络,请参见《弹性云服务器用户指南》 VPC和子网:选择已开启IPv6的子网及子网所属的VPC。 选择“自动分配IPv6地址”。 共享带宽:选择一个共享带宽。 说明: 该场景的具体实现请参见搭建IPv6网络。 IPv4网段 IPv6网段 IPv4私网地址+IPv4 EIP:实例绑定IPv4 EIP,支持IPv4公网通信。 IPv4私网地址:实例不绑定IPv4 EIP,支持IPv4内网通信。 IPv6地址+共享带宽:同时支持IPv6公网通信和IPv6内网通信。 使用IPv4/IPv6双栈网络请参考IPv4/IPv6双栈网络。
  • IPv6转换功能应用场景 如果您想使部署应用的ECS面向Internet客户端提供IPv6服务,但您的ECS规格不支持IPv6网络,或者您不想通过搭建IPv6网络来实现该需求,那么您可以通过弹性公网IP的IPv6转换功能快速实现该能力。场景示例和资源规划如表2。 表2 IPv6 EIP(开启IPv6转换)网络的应用场景及资源规划 应用场景 场景示例 条件 子网网段类型 ECS IPv6公网通信 不搭建IPv6网络,使ECS为Internet上的客户端提供IPv6服务。 实例绑定弹性公网IP。 开启IPv6转换。 IPv4网段 IPv4私网地址:支持IPv4内网通信。 IPv4 EIP地址(开启IPv6转换):同时支持IPv4公网通信和IPv6公网通信。
  • 维度 Key Value publicip_id 弹性公网IP ID bandwidth_id 带宽ID geip_global_eip_id 全域弹性公网IP ID geip_internet_bandwidth_id 公网带宽ID 对于有多个测量维度的测量对象,使用接口查询监控指标时,所有测量维度均为必选。 查询单个监控指标时,多维度dim使用样例:dim.0=bandwidth_id,530cd6b0-86d7-4818-837f-935f6a27414d&dim.1=publicip_id,3773b058-5b4f-4366-9035-9bbd9964714a。 批量查询监控指标时,多维度dim使用样例: "dimensions": [ { "name": "bandwidth_id", "value": "530cd6b0-86d7-4818-837f-935f6a27414d" }, { "name": "publicip_id", "value": "3773b058-5b4f-4366-9035-9bbd9964714a" } ],
  • 监控指标 表1 弹性公网IP和带宽以及全域弹性公网IP和公网带宽支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) upstream_bandwidth 出网带宽 该指标用于统计测试对象出云平台的网络速度(原指标为上行带宽)。 单位:比特/秒 ≥ 0 bit/s 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 downstream_bandwidth 入网带宽 该指标用于统计测试对象入云平台的网络速度(原指标为下行带宽)。 单位:比特/秒 ≥ 0 bit/s 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 upstream_bandwidth_usage 出网带宽使用率 该指标用于统计测量对象出云平台的带宽使用率,以百分比为单位。 出网带宽使用率=出网带宽指标/购买的带宽大小 0-100% 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 downstream_bandwidth_usage 入网带宽使用率 该指标用于统计测量对象入云平台的带宽使用率,以百分比为单位。 入网带宽使用率=入网带宽指标/购买的带宽大小 说明: 由于华为云在部分站点对10Mbps以下的配置带宽提供10Mbps的入网带宽上限,此时监控的入网带宽使用率会存在大于100%的情况。 EIP使用时修改带宽大小,带宽使用率的指标同步生效会有5~10min的延时。 0-100% 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 up_stream 出网流量 该指标用于统计测试对象出云平台的网络流量(原指标为上行流量)。 单位:字节 ≥ 0 Bytes 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 down_stream 入网流量 该指标用于统计测试对象入云平台的网络流量(原指标为下行流量)。 单位:字节 ≥ 0 Bytes 带宽或弹性公网IP 全域弹性公网IP或公网带宽 1分钟 带宽规格变更(带宽升降配)后,带宽规格数据在监控指标上生效有5~10min的时间延迟。
  • 操作场景 当您购买弹性公网IP时,无论是哪种计费模式,只要没有加入共享带宽,那么您的弹性公网IP使用的是独享带宽。独享带宽支持对单个弹性公网IP进行限速。 本章节指导用户修改独享带宽大小,您可以增加或者降低带宽大小,修改带宽大小不会更换EIP的地址。 当您修改带宽大小时,不同计费方式的带宽收费和生效时间不同,请您参考表1了解详情,适用于独享带宽和共享带宽两种情况。 降低带宽大小,可能会影响业务流量造成丢包,请确认对业务产生的影响,谨慎操作。 如果当前带宽限速范围最大值无法满足使用需要,您可以您提交工单申请扩大配额。 表1 修改带宽大小的费用情况 计费模式 计费方式 变更操作 对费用的影响 包年/包月 按带宽计费 增加带宽大小(补差价升配) 升配后,新带宽大小将在原来已有的计费周期内立即生效。 您需要按照与原带宽的价格差,结合使用周期内的剩余时间,补齐差价。 例如:(以下价格仅作示例,实际价格以控制台显示为准) 客户于2018/11/1 购买了1Mbit/s的带宽,购买时长为1个月,此时价格为18.4元/月,客户使用余额支付18.4元,实付金额为18.4元。 客户在2018/11/24 将带宽升级为5Mbit/s,价格为92元/月。 这时,剩余天数为 30 - 24 = 6天,升配费用=92 / 30 * 6 - 18.4 / 30 * 6 = 14.72元。 了解更多变更资源计费信息,请参见变更资源费用说明。 包年/包月 按带宽计费 降低带宽大小(续费降配) 降配后,新带宽大小不会立即生效。 您需要选择续费时长并根据新的带宽大小进行续费,续费成功后,新带宽大小在新的计费周期内生效。 续费降配订单在资源未生效前支持退订。 续费降配后,当前计费周期的剩余时间内不能再对带宽进行任何修改,请谨慎操作。 包年/包月 按带宽计费 降低带宽大小(即时降配) 降配后,新的带宽大小将立即生效。 包年/包月 按带宽计费 临时增加带宽大小(使用带宽加油包临时升配) 带宽加油包单独计费,您可以在带宽的使用周期内选择任意时间段使用带宽加油包临时增加带宽,带宽加油包到期后带宽自动回落。 按需计费 按带宽计费 增加/降低带宽大小 增加/降低带宽大小后,新的带宽大小和计费方式将立即生效。 按需计费 按流量计费 增加/降低带宽大小 增加/降低带宽大小后,新的带宽大小将立即生效。 按流量计费的EIP,带宽仅做限速使用,带宽大小不影响实际费用。
  • 操作步骤 进入购买共享流量包页面。 按照提示配置参数。 表1 参数说明 参数 说明 取值样例 区域 不同的区域之间的资源包不互通,每个区域需要分别购买,请根据您的实际需求谨慎选择。 具体可以参考如下示例: 如果您当前需要购买共享流量包抵扣区域A中的EIP带宽产生的流量资费,那么您必须购买区域A的共享流量包。如果购买其他区域(例如区域B)的流量包,就不能抵扣区域A中的EIP带宽产生的流量资费。 华东-上海一 类型 根据弹性公网IP的带宽类型进行设置。 动态BGP:支持类型为动态BGP的按需计费(按流量计费)带宽。 静态BGP:支持类型为静态BGP的按需计费(按流量计费)带宽。 静态BGP 套餐有效期 套餐时长。请根据您的需要选择合适的套餐时长,流量包不支持退订,流量包购买成功后即刻生效,超过有效期后未用完的流量将无法使用。 一个月 规格 共享流量包的大小,单位GB。 10GB 购买时长 套餐时长。 Default 单击“立即购买”。 在产品配置信息确认页面,再次核对共享流量包信息,单击“去支付”。 进入订单支付页面,确认订单信息,单击“确认”。
  • 弹性公网IP的使用限制 包年/包月计费的EIP到期后未续费,或按需计费的EIP欠费后未及时支付账户欠款,可能会导致EIP被释放,数据无法恢复。 通用可用区的EIP不支持绑定至边缘可用区的实例,边缘可用区的EIP也不支持绑定至通用可用区的实例。 关于边缘可用区和普通可用区的区别请参考《智能边缘小站用户指南》。 弹性公网IP与云资源属于不同的资源,弹性公网IP的计费方式和云资源不同的情况下,不影响绑定。 比如,包年/包月的EIP可以绑定给按需计费的弹性云服务器使用。 当带宽严重超限或受到攻击时(一般是受到了DDoS攻击),EIP会被封堵,但不影响对EIP资源执行绑定、解绑等操作。 一个EIP只能绑定一个云资源使用,且EIP和云资源必须在同一个区域,不支持跨区域使用EIP。 EIP在使用周期内不会改变EIP地址。 弹性云服务器关机和开机,绑定ECS的EIP地址不会改变。 EIP变更计费模式或者修改带宽大小,均不会改变EIP的地址。
  • 弹性公网IP 弹性公网IP(Elastic IP,简称EIP)提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。为资源配置弹性公网IP后,可以直接访问Internet,如果资源只配置了私网IP,就无法直接访问Internet。 弹性公网IP可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑。 一个弹性公网IP只能绑定一个云资源使用,弹性公网IP和与它要绑定的云资源必须在同一个区域,不支持跨区域使用弹性公网IP。 图1 通过EIP访问公网
  • 全域互联带宽的使用限制 目前仅支持添加同一带宽区域类型下的实例。 一个全域互联带宽仅能添加一种实例类型,首次添加了实例类型后仅可添加该类型下的子实例,如需添加其他实例类型,请进行移出后重新添加。 全域弹性公网IP:支持批量添加和移出实例。 云连接中心网络:仅支持添加和移出一个实例。 将云连接中心网络添加至全域互联带宽,需先配置跨地域连接,详情请参见: 创建中心网络。 管理策略。 管理附件。 不同带宽类型的全域互联带宽可配合不同的实例使用,详情见表2。 表2 全域互联带宽添加实例说明 带宽类型 全域弹性公网IP 中心网络 城域带宽 √ × 大区带宽 √ √ 跨区带宽 √ √ 将实例移出全域互联带宽时,请确保该实例上没有业务运行,否则会导致业务中断。 当全域互联带宽已用于配置云连接实例的域间带宽时,无法移出云连接实例。您需要到云连接实例下,删除对应的域间带宽配置后再将云连接实例移出全域互联带宽。 待删除的全域互联带宽不能绑定实例,否则无法删除。请先参考将实例移出全域互联带宽,解绑实例。
  • 大区/跨区带宽使用场景(中心网络) 本示例中,以云连接中接入ER为例: 连接ER1和ER2:ER1所在区域为华东-上海一,ER2所在区域为华南-广州,华东-上海一和华南-广州都属于中国大陆大区,因此连接ER1和ER2的全域互联带宽应该选择大区带宽。 连接ER1和ER3:ER1所在区域为华东-上海一,ER3所在区域为中国-香港,华东-上海一属于中国大陆大区,中国-香港属于亚太大区,因此连接ER1和ER3的全域互联带宽应该选择跨区带宽。 本端大区:选择ER1所在大区,此处为中国大陆。 对端大区:选择ER3所在大区,此处为亚太。 本端也可以选择ER3所在大区,对端选择ER1所在大区,本端和对端不做严格区分,只要确保两端的ER均已接入带宽中即可。 连接ER2和ER3:ER2所在区域为华南-广州,ER3所在区域为中国-香港,华南-广州属于中国大陆大区,中国-香港属于亚太大区,因此连接ER2和ER3的全域互联带宽应该选择跨区带宽。 本端大区:选择ER2所在大区,此处为中国大陆。 对端大区:选择ER3所在大区,此处为亚太。 图4 大区/跨区带宽使用场景(中心网络)
  • 跨区带宽使用场景(GEIP) 本示例中,以GEIP绑定至ECS为例: GEIP绑定的ECS所在区域为中国-香港,GEIP接入点为华东-杭州,中国-香港属于亚太大区,华东-杭州属于中国大陆大区 ,因此全域互联带宽应该选择跨区带宽。 本端大区:选择ECS所在大区,此处为亚太。 对端大区:选择GEIP接入点所在大区,此处为中国大陆。 本端必须选择GEIP绑定资源所在的大区,对端选择GEIP接入点所在的大区,请务必确保本端和对端大区选择正确。 图3 跨区带宽使用场景(GEIP)
  • 操作步骤 进入购买弹性公网IP页面。 根据界面提示配置参数。 图1 购买EIP 表1 参数说明 参数 说明 取值样例 计费模式 计费模式分为以下两种: 包年/包月 按需计费 按需计费 区域 不同区域的资源之间内网不互通。请选择靠近您客户的区域,可以降低网络时延、提高访问速度。购买EIP时所选择的区域即为EIP的归属地。 说明: 在“华北-乌兰察布一”区域购买的EIP的归属地为北京。 华东-上海一 线路 全动态BGP:可以根据设定的寻路协议实时自动优化网络结构,以保持客户使用的网络持续稳定、高效。 静态BGP:网络结构发生变化时,无法实时自动调整网络设置以保障用户体验。 优选BGP:是特定方向的优质线路。使用BGP协议与多家主流运营商线路互联对接,建立直连中国内地的公网互联路径,提供中国-香港区域与中国内地间的低时延、高质量的网络互通。(该线路资源仅在“中国-香港”区域支持。) 边缘线路:计费模式为按需计费并且已购买边缘小站时,该项可见。边缘线路是通过靠近用户和终端的网络边缘站点,实现区域内低时延高带宽的网络服务。边缘小站详细信息请参见 智能边缘小站。 弹性公网IP池:计费模式为按需计费时,该项可见。弹性公网IP池是一种批量EIP开通到管理的专属解决方案。弹性公网IP池为EIP分配全动态BGP线路,持续保证网络稳定、高效。弹性公网IP池详细信息请参见弹性公网IP池简介。 更多静态BGP与全动态BGP区别信息请参见静态BGP与全动态BGP有何区别? 全动态BGP 弹性公网IP池 选择已购买的弹性公网IP池。 仅当EIP的计费模式为按需计费,线路为弹性公网IP池时,该项可见。 eipPool-test 公网带宽 选择按需计费时,需要选择公网带宽的计费方式。 按带宽计费:指定带宽上限,按使用时间计费,与使用的流量无关。适用于流量较大或较稳定场景使用。 按流量计费:指定带宽上限,按实际使用的出公网流量计费,与使用时间无关。适用于流量小或流量波动较大的场景。 加入共享带宽:带宽可以加入多个弹性公网IP,带宽被多个弹性公网IP地址共用。适用于多业务流量错峰分布场景。 按带宽计费 带宽大小 带宽大小,单位Mbit/s。 100 IPv6转换 开启IPv6转换后,将提供IPv4和IPv6弹性公网IP地址,原有IPv4业务可以快速为IPv6用户提供访问能力。 开启 DDos防护 DDoS原生基础防护 免费提供不高于5Gbps的DDoS攻击防护,如超过防护阈值,EIP会被封堵。 - 弹性公网IP名称 弹性公网IP的名称。 名称只能由中文、英文字母、数字、“_”、“-”和“.”组成,且不能有空格,长度不能大于64个字符。 eip-test 企业项目 申请弹性公网IP时,可以将弹性公网IP加入已启用的企业项目。 企业项目管理提供了一种按企业项目管理云资源的方式,帮助您实现以企业项目为基本单元的资源及人员的统一管理,默认项目为default。 关于创建和管理企业项目的详情,请参见《企业管理用户指南》。 default 高级配置 单击下拉箭头,可配置弹性公网IP的高级参数,包括带宽名称、标签等。 - 带宽名称 带宽的名称。 bandwidth 标签 用于标识弹性公网IP地址。包括键和值。 标签的命名规则请参考表2。 说明: 如您的组织已经设定弹性公网IP的相关标签策略,则需按照标签策略规则为弹性公网IP添加标签。标签如果不符合标签策略的规则,则可能会导致弹性公网IP创建失败,请联系组织管理员了解标签策略详情。 键:Ipv4_key1 值:3005eip 监控 用于开启弹性公网IP的基础监控。默认开启。 开启基础监控后,用户可以通过 云监控 提供的管理控制台或API接口来检索弹性公网IP和带宽产生的监控指标和告警信息。 - 购买时长 选择包年/包月计费模式时,需要选择购买时长。 1个月 自动续费 选择包年/包月计费模式时,可以选择开启自动续费。自动续费周期根据用户指定的购买时长确定。 按月购买:自动续费周期为一个月。 按年购买:自动续费周期为一年。 - 购买量 弹性公网IP数量。 仅在按需计费时可以选择弹性公网IP数量。 1 表2 弹性公网IP地址标签命名规则 参数 规则 样例 键 不能为空。 对于同一弹性公网IP键值唯一。 长度不超过36个字符。 由英文字母、数字、下划线、中划线、中文字符组成。 Ipv4_key1 值 长度不超过43个字符。 由英文字母、数字、下划线、点、中划线、中文字符组成。 eip-01 对于按需计费的弹性公网IP,当带宽类型选择“共享带宽”时,只能在“带宽名称”的下拉选项中选择已有的共享带宽加入。如果带宽名称不可选,说明您没有可用共享带宽,请先创建。 独享带宽与共享带宽不支持直接互相转换,但针对按需计费的弹性公网IP,您可以购买一个共享带宽,进行如下操作: 将弹性公网IP添加到共享带宽,则弹性公网IP使用共享带宽。 将弹性公网IP移出共享带宽,则弹性公网IP使用独享带宽。 单击“立即购买”。 当您创建资源时配额为0,不支持创建,如需更多配额请申请扩大配额,请您提交工单联系华为云客服。 当您批量创建资源时配额不足,系统会出现信息提示页面,提示所需资源配额不足,并列出参数信息“资源类型”、“所需配额”和“剩余配额”,您可以根据需要选择“申请扩大配额”或者“取消”。 在产品配置信息确认页面,再次核对弹性公网IP信息,阅读并勾选“弹性公网IP服务声明”。 选择按需计费的弹性公网IP时,单击“提交”。 选择包年/包月计费的弹性公网IP时,单击“去支付”。 进入订单支付页面,确认订单信息,单击“确认付款”。 当申请弹性公网IP选择“新建共享带宽”时,需要同时购买共享带宽。
  • 操作场景 为资源申请和绑定弹性公网IP后,可以直接访问Internet。 当您想找回已释放的弹性公网IP或申请一个指定地址的弹性公网IP时,您可以通过API接口来实现。在申请弹性公网IP时请将“ip_address”的值设置为您想找回或指定的IP地址。详情请参见《弹性公网IP API参考》。 如果该地址已被分配给其他用户则无法申请成功。 通过API接口不支持找回或创建指定的包年/包月的弹性公网IP。 管理控制台不支持找回或创建指定地址的弹性公网IP。
  • 操作步骤 进入全域公网带宽列表页面。 在全域公网带宽列表中,通过搜索或者直接查找,找到目标全域公网带宽。 您可以通过以下两种操作方法,添加全域弹性公网IP。 在全域公网带宽列表页面中: 在目标全域公网带宽所在行的操作列下,单击“迁入全域弹性公网IP”。 进入“迁入全域弹性公网IP”页面。 根据需求选择类型“公网IP”或者“公网IP段”,在列表中,勾选一个或多个全域弹性公网IP,并单击“确定”。 返回全域公网带宽列表,可以看到对应的全域弹性公网IP数量增加。 在全域公网带宽详情页面中: 单击目标全域公网带宽名称超链接。 进入全域公网带宽的“基本信息”页签。 在“全域弹性公网IP”页签下,单击“迁入”。 进入“迁入全域弹性公网IP”页面。 根据需求选择类型“公网IP”或者“公网IP段”,在列表中,勾选一个或多个全域弹性公网IP,并单击“确定”。 返回全域弹性公网IP列表,可以看到对应的全域弹性公网IP。
  • 内置函数 HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下用户不需要熟知这些函数的使用。详情见表1。 表1 内置函数 函数名称 功能描述 hll_in 以string格式接收hll数据。 hll_out 以string格式发送hll数据。 hll_recv 以bytea格式接收hll数据。 hll_send 以bytea格式发送hll数据。 hll_trans_in 以string格式接收hll_trans_type数据。 hll_trans_out 以string格式发送hll_trans_type数据。 hll_trans_recv 以bytea形式接收hll_trans_type数据。 hll_trans_send 以bytea形式发送hll_trans_type数据。 hll_typmod_in 接收typmod类型数据。 hll_typmod_out 发送typmod类型数据。 hll_hashval_in 接收hll_hashval类型数据。 hll_hashval_out 发送hll_hashval类型数据。 hll_add_trans0 类似于hll_add所提供的功能,初始化时无指定入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans1 类似于hll_add所提供的功能,初始化时指定一个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans2 类似于hll_add所提供的功能,初始化时指定两个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans3 类似于hll_add所提供的功能,初始化时指定三个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans4 类似于hll_add所提供的功能,初始化时指定四个入参,通常在聚合运算的第一阶段DN上使用。 hll_union_trans 类似hll_union所提供的功能,在聚合运算的第一阶段DN上使用。 hll_union_collect 类似于hll_union所提供的功能,在聚合运算第二阶段DN上使用,汇总各个DN上的结果。 hll_pack 在聚合运算第三阶段DN上使用,把自定义hll_trans_type类型最后转换成hll类型。 hll 用于hll类型转换成hll类型,根据输入参数会设定指定参数。 hll_hashval 用于bigint类型转换成hll_hashval类型。 hll_hashval_int4 用于int4类型转换成hll_hashval类型。
  • 废弃函数 由于版本升级,HLL(HyperLogLog)有一些旧的函数废弃,用户可以用类似的函数进行替代。 hll_schema_version(hll) 描述:查看当前hll中的schema version。旧版本schema version是常值1,用来进行hll字段的头部校验,重构后的hll在头部增加字段“HLL”进行校验,schema version不再使用。 hll_regwidth(hll) 描述:查看hll数据结构中桶的位数大小。旧版本桶的位数regwidth取值1~5,会存在较大的误差,也限制了基数估计上限。 重构后regwidth为固定值6,不再使用regwidth变量。 hll_expthresh(hll) 描述:得到当前hll中expthresh大小。采用hll_log2explicit(hll)替代类似功能。 hll_sparseon(hll) 描述:是否启用Sparse模式。采用hll_log2sparse(hll)替代类似功能,0表示关闭Sparse模式。
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --准备数据 gaussdb=# CREATE TABLE t_id(id int); gaussdb=# INSERT INTO t_id VALUES(generate_series(1,500)); gaussdb=# CREATE TABLE t_data(a int, c text); gaussdb=# INSERT INTO t_data SELECT mod(id,2), id FROM t_id; --创建表并指定列为hll gaussdb=# CREATE TABLE t_a_c_hll(a int, c hll); --根据a列GROUP BY对数据分组,把各组数据加到hll中 gaussdb=# INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a; --得到每组数据中hll的Distinct值 gaussdb=# SELECT a, #c AS cardinality FROM t_a_c_hll ORDER BY a; a | cardinality ---+------------------ 0 | 247.862354346299 1 | 250.908710610377 (2 rows) hll_add_agg(hll_hashval, int32 log2m) 描述:把哈希后的数据按照分组放到hll中, 并指定参数log2m,取值范围是10到16。若输入-1或者NULL,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) FROM t_data; hll_cardinality ------------------ 497.965240179228 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1或者NULL,则log2explicit采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse) 描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1或者NULL,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse、duplicatecheck,duplicatecheck取值范围是0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1或者NULL,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_union_agg(hll) 描述:将多个hll类型数据union成一个hll。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 --将各组中的hll数据union成一个hll,并计算distinct值。 gaussdb=# SELECT #hll_union_agg(c) AS cardinality FROM t_a_c_hll; cardinality ------------------ 498.496062953313 (1 row) --删除表 gaussdb=# DROP TABLE t_id; gaussdb=# DROP TABLE t_data; gaussdb=# DROP TABLE t_a_c_hll; 注意:当两个或者多个hll数据结构做union的时候,必须要保证其中每一个hll里面的精度参数一样,否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。
  • 功能函数 hll_empty() 描述:创建一个空的hll。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_empty(); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m) 描述:创建空的hll并指定参数log2m,取值范围是10到16。若输入-1,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(-1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit) 描述:创建空的hll并依次指定参数log2m、log2explicit。log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1,则log2explicit采用内置默认值。 返回值类型: hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4, 8); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, 4, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse、duplicatecheck。duplicatecheck取0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4, 8, 0); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, 4, 8, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) hll_add(hll, hll_hashval) 描述:把hll_hashval加入到hll中。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_add(hll_empty(), hll_hash_integer(1)); hll_add ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_add_rev(hll_hashval, hll) 描述:把hll_hashval加入到hll中,和hll_add功能一样,只是参数位置进行了交换。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_add_rev(hll_hash_integer(1), hll_empty()); hll_add_rev ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_eq(hll, hll) 描述:比较两个hll是否相等。 返回值类型:bool 示例: 1 2 3 4 5 gaussdb=# SELECT hll_eq(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_eq -------- f (1 row) hll_ne(hll, hll) 描述:比较两个hll是否不相等。 返回值类型:bool 示例: 1 2 3 4 5 gaussdb=# SELECT hll_ne(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_ne -------- t (1 row) hll_cardinality(hll) 描述:计算hll的distinct值。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_empty() || hll_hash_integer(1)); hll_cardinality ----------------- 1 (1 row) hll_union(hll, hll) 描述:把两个hll数据结构union成一个。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_union(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_union -------------------------------------------------------------------------------------------- \x484c4c10002000002b090000000000000000400000000000000000b3ccc49320cca1ae3e2921ff133fbaed00 (1 row)
  • 日志函数 hll主要存在三种模式Explicit、Sparse、Full。当数据规模比较小的时候会使用Explicit模式,这种模式下distinct值的计算是没有误差的;随着distinct值越来越多,hll会先后转换为Sparse模式和Full模式,这两种模式在计算结果上没有任何区别,只影响hll函数的计算效率和hll对象的存储空间。下面的函数可以用于查看hll的一些参数。 hll_print(hll) 描述:打印hll的一些debug参数信息。 示例: 1 2 3 4 5 gaussdb=# SELECT hll_print(hll_empty()); hll_print ------------------------------------------------------------------------------- type=1(HLL_EMPTY), log2m=14, log2explicit=10, log2sparse=12, duplicatecheck=0 (1 row) hll_type(hll) 描述:查看当前hll的类型。返回值具体含义如下:返回值0,表示HLL_UNINIT,未初始化的hll对象;返回值1,表示HLL_EMPTY,hll空对象;返回值2,表示HLL_EXPLICIT,Explicit模式的hll对象;返回值3,表示HLL_SPARSE,Sparse模式的hll对象;返回值4,表示HLL_FULL,Full模式的hll对象;返回值5,表示HLL_UNDEFINED,不合法的hll对象。 示例: 1 2 3 4 5 gaussdb=# SELECT hll_type(hll_empty()); hll_type ---------- 1 (1 row) hll_log2m(hll) 描述:查看当前hll数据结构中的log2m数值,log2m是分桶数的对数值,此值会影响最后hll计算distinct误差率,误差率计算公式为±1.04/√(2 ^ log2m)。当显式指定log2m的取值为10-16之间时,hll会设置分桶数为2log2m。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# SELECT hll_log2m(hll_empty()); hll_log2m ----------- 14 (1 row) gaussdb=# SELECT hll_log2m(hll_empty(10)); hll_log2m ----------- 10 (1 row) gaussdb=# SELECT hll_log2m(hll_empty(-1)); hll_log2m ----------- 14 (1 row) hll_log2explicit(hll) 描述:查看当前hll数据结构中的log2explicit数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2explicit值的大小改变策略,比如log2explicit为0的时候就会跳过Explicit模式而直接进入Sparse模式。当显式指定log2explicit的取值为1-12之间时,hll会在数据段长度超过2log2explicit时转为Sparse模式。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# SELECT hll_log2explicit(hll_empty()); hll_log2explicit ------------------ 10 (1 row) gaussdb=# SELECT hll_log2explicit(hll_empty(12, 8)); hll_log2explicit ------------------ 8 (1 row) gaussdb=# SELECT hll_log2explicit(hll_empty(12, -1)); hll_log2explicit ------------------ 10 (1 row) hll_log2sparse(hll) 描述:查看当前hll数据结构中的log2sparse数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2sparse值的大小改变策略,比如log2sparse为0的时候就会跳过Sparse模式而直接进入Full模式。当显式指定Sparse的取值为1-14之间时,hll会在数据段长度超过2log2sparse时转为Full模式。当显示指定log2sparse为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# SELECT hll_log2sparse(hll_empty()); hll_log2sparse ---------------- 12 (1 row) gaussdb=# SELECT hll_log2sparse(hll_empty(12, 8, 10)); hll_log2sparse ---------------- 10 (1 row) gaussdb=# SELECT hll_log2sparse(hll_empty(12, 8, -1)); hll_log2sparse ---------------- 12 (1 row) hll_duplicatecheck(hll) 描述:是否启用duplicatecheck,0是关闭,1是开启。默认关闭,对于有较多重复值出现的情况,可以开启以提高效率。当显示指定duplicatecheck为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# SELECT hll_duplicatecheck(hll_empty()); hll_duplicatecheck -------------------- 0 (1 row) gaussdb=# SELECT hll_duplicatecheck(hll_empty(12, 8, 10, 1)); hll_duplicatecheck -------------------- 1 (1 row) gaussdb=# SELECT hll_duplicatecheck(hll_empty(12, 8, 10, -1)); hll_duplicatecheck -------------------- 0 (1 row)
  • 注意事项 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开时,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。同时enable_copy_server_files打开时,管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径必须为设置路径的子路径,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。该参数会对copy使用路径中的相对路径进行报错处理。 COPY只能用于表,不能用于视图。 COPY TO需要读取的表的select权限,COPY FROM需要插入的表的INSERT权限。 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\.)表示输入结束。 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。 数据的结束可以用一个只包含反斜杠和句点(\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。 COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\\N。
  • 语法格式 从一个文件拷贝数据到一个表。 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ LOG ERRORS DATA ] [ REJECT LIMIT 'limit' ] [ [ WITH ] ( option [, ...] ) ] | copy_option | [ TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) ] | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 上述语法中fixed formatter与copy_option语法兼容、与option语法不兼容;copy_option与option语法不兼容;transfrom与copy_option、fixed formatter语法兼容。 把一个表的数据拷贝到一个文件。 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY query {(SELECT) | (VALUES)} TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | [ FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITERS不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 其中可选参数option子句语法为: FORMAT 'format_name' | FORMAT binary | DELIMITER 'delimiter_character' | NULL 'null_string' | HEADER [ boolean ] | USEEOF [ boolean ] | FILEHEADER 'header_file_string' | FREEZE [ boolean ] | QUOTE 'quote_character' | ESCAPE 'escape_character' | EOL 'newline_character' | NOESCAPING [ boolean ] | FORCE_QUOTE { ( column_name [, ...] ) | * } | FORCE_NOT_NULL ( column_name [, ...] ) | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA [ boolean ] | FILL_MISSING_FIELDS [ boolean ] | COMPATIBLE_ILLEGAL_CHARS [ boolean ] | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' 其中可选参数copy_option子句语法为: | NULL 'null_string' | HEADER | USEEOF | FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...] | FORCE_QUOTE { column_name [, ...] | * } | BINARY | CSV | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character' | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS [ { 'one' | 'multi' } ] | COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' | SKIP int_number | WHEN { ( start - end ) | column_name } { = | != } 'string' | SEQUENCE ( { column_name ( integer [, incr] ) [, ...] } ) | FILLER ( { column_name [, ...] } ) | CONSTANT ( { column_name 'constant_string' [, ...] } )
  • 数值类型 表1列出了所有的可用类型。数字操作符和相关的内置函数请参见数字操作函数和操作符。 表1 整数类型 名称 描述 存储空间 范围 TINYINT 微整数,别名为INT1。 1字节 0 ~ +255 SMALLINT 小范围整数,别名为INT2。 2字节 -32,768 ~ +32,767 INTEGER 常用的整数,别名为INT4。 4字节 -2,147,483,648 ~ +2,147,483,647 BINARY_INTEGER 常用的整数INTEGER的别名。 4字节 -2,147,483,648 ~ +2,147,483,647 BIGINT 大范围的整数,别名为INT8。 8字节 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 int16 十六字节的大范围整数,目前不支持用户用于建表等使用。 16字节 -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建具有TINYINT类型数据的表。 gaussdb=# CREATE TABLE int_type_t1 ( IT_COL1 TINYINT ); --向创建的表中插入数据。 gaussdb=# INSERT INTO int_type_t1 VALUES(10); --查看数据。 gaussdb=# SELECT * FROM int_type_t1; it_col1 --------- 10 (1 row) --删除表。 gaussdb=# DROP TABLE int_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --创建具有TINYINT,INTEGER,BIGINT类型数据的表。 gaussdb=# CREATE TABLE int_type_t2 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT ); --插入数据。 gaussdb=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000); --查看数据。 gaussdb=# SELECT * FROM int_type_t2; a | b | c | d -----+----+------+------- 100 | 10 | 1000 | 10000 (1 row) --删除表。 gaussdb=# DROP TABLE int_type_t2; TINYINT、SMALLINT、INTEGER、BIGINT和INT16类型存储各种范围的数字,也就是整数。如果存储超出范围以外的数值将会导致错误。 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为INTEGER的处理速度相对快得多。 表2 任意精度类型 名称 描述 存储空间 范围 NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 NUMBER[(p[,s])] NUMERIC类型的别名。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: --创建表。 gaussdb=# CREATE TABLE decimal_type_t1 ( DT_COL1 DECIMAL(10,4) ); --插入数据。 gaussdb=# INSERT INTO decimal_type_t1 VALUES(123456.122331); --查询表中的数据。 gaussdb=# SELECT * FROM decimal_type_t1; dt_col1 ------------- 123456.1223 (1 row) --删除表。 gaussdb=# DROP TABLE decimal_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建表。 gaussdb=# CREATE TABLE numeric_type_t1 ( NT_COL1 NUMERIC(10,4) ); --插入数据。 gaussdb=# INSERT INTO numeric_type_t1 VALUES(123456.12354); --查询表中的数据。 gaussdb=# SELECT * FROM numeric_type_t1; nt_col1 ------------- 123456.1235 (1 row) --删除表。 gaussdb=# DROP TABLE numeric_type_t1; 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当数值超出整数可表示最大范围时,再选用任意精度类型。 使用NUMERIC/DECIMAL进行列定义时,建议指定该列的精度p以及标度s。 表3 序列整型 名称 描述 存储空间 范围 SMALLSERIAL 二字节序列整型。 2字节。 -32,768 ~ +32,767。 SERIAL 四字节序列整型。 4字节。 -2,147,483,648 ~ +2,147,483,647。 BIGSERIAL 八字节序列整型。 8字节。 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807。 LARGESERIAL 默认插入十六字节序列整型,实际数值类型和NUMERIC相同。 变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 小数点前最大131,072位,小数点后最大16,383位。 示例: 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 --创建表。 gaussdb=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL); --插入数据。 gaussdb=# INSERT INTO smallserial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO smallserial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM smallserial_type_tab; a --- 1 2 (2 rows) --创建表。 gaussdb=# CREATE TABLE serial_type_tab(b SERIAL); --插入数据。 gaussdb=# INSERT INTO serial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO serial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM serial_type_tab; b --- 1 2 (2 rows) --创建表。 gaussdb=# CREATE TABLE bigserial_type_tab(c BIGSERIAL); --插入数据。 gaussdb=# INSERT INTO bigserial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO bigserial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM bigserial_type_tab; c --- 1 2 (2 rows) --创建表。 gaussdb=# CREATE TABLE largeserial_type_tab(c LARGESERIAL); --插入数据。 gaussdb=# INSERT INTO largeserial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO largeserial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM largeserial_type_tab; c --- 1 2 (2 rows) --删除表。 gaussdb=# DROP TABLE smallserial_type_tab; gaussdb=# DROP TABLE serial_type_tab; gaussdb=# DROP TABLE bigserial_type_tab; gaussdb=# DROP TABLE largeserial_type_tab; SMALLSERIAL、SERIAL、BIGSERIAL和LARGESERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,序列发生器将从属于该字段,这样当该字段或表被删除的时候也一并删除它。目前支持在创建表时候指定SERIAL列,也支持在PG兼容模式下的普通表增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,所以也不可以将表中存在的列类型转化为SERIAL。 表4 浮点类型 名称 描述 存储空间 范围 REAL, FLOAT4 单精度浮点数,不精准。 4字节。 -3.402E+38~+3.402E+38,6位十进制数字精度。 DOUBLE PRECISION, FLOAT8 双精度浮点数,不精准。 8字节。 -1.79E+308~+1.79E+308,15位十进制数字精度。 FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53]。 4字节或8字节。 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 BINARY_DOUBLE 是DOUBLE PRECISION的别名,为兼容Oracle数据类型。 8字节。 -1.79E+308~+1.79E+308,15位十进制数字精度。 DEC[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 INTEGER[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 在未指定精度和标度的情况下,默认精度p为10,标度s为0。 未指定精度和标度的情况下,该类型映射为INTEGER。指定精度和标度的情况下,该类型映射为NUMERIC。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 未指定精度和标度的情况下,范围是-2,147,483,648 ~ +2,147,483,647。 二进制浮点数据类型REAL、FLOAT4、DOUBLE、DOUBLE PRECISION、FLOAT8、FLOAT[(p)]和BINARY_DOUBLE为不精确的数值类型,其内部存储为近似值,因此存储和检索时可能会显示轻微的差异。当用户在使用二进制浮点数据类型时需要注意以下几点: 精确存储和计算:如果需要精确存储和计算(例如货币金额),请改用精确的数据类型(例如numeric)。 复杂计算:若使用不精确的数据类型执行复杂计算以获得重要数据,需要仔细评估其结果。 浮点数比较:比较两个浮点数是否相等的结果可能与预期存在差异。 下溢错误:如果一个浮点数过于接近零,反而无法准确表示,会导致下溢错误。 表4中描述的p为精度,表示整数位最低可以接受的总位数;s为小数位位数。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 --创建表。 gaussdb=# CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3) ); --插入数据。 gaussdb=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654); --查看数据。 gaussdb=# SELECT * FROM float_type_t2 ; ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7 ---------+---------+-------------+---------+---------+----------+--------- 10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124 (1 row) --删除表。 gaussdb=# DROP TABLE float_type_t2; 父主题: 数据类型
  • 参数说明 plan_hint子句 以/*+ */的形式在MERGE关键字后,用于对MERGE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 partition_clause 指定分区MERGE操作: PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍。 如果value子句的值和指定分区不一致,会抛出异常。 示例详见CREATE TABLE SUBPARTITION。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。
  • 示例 -- 创建目标表products和源表newproducts,并插入数据 gaussdb=# CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); gaussdb=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); gaussdb=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); gaussdb=# INSERT INTO products VALUES (1600, 'play gym', 'toys'); gaussdb=# INSERT INTO products VALUES (1601, 'lamaze', 'toys'); gaussdb=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); gaussdb=# CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); gaussdb=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); gaussdb=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); gaussdb=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); gaussdb=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); -- 进行MERGE INTO操作 gaussdb=# MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; MERGE 4 -- 查询更新后的结果 gaussdb=# SELECT * FROM products ORDER BY product_id; product_id | product_name | category ------------+----------------+----------- 1501 | vivitar 35mm | electrncs 1502 | olympus camera | electrncs 1600 | play gym | toys 1601 | lamaze | toys 1666 | harry potter | toys 1700 | wait interface | books (6 rows) -- 删除表 gaussdb=# DROP TABLE products; gaussdb=# DROP TABLE newproducts;
  • 语法格式 MERGE [/*+ plan_hint */] INTO table_name [ partition_clause ] [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ [ AS ] alias ] ON ( condition ) [ WHEN MATCHED THEN UPDATE SET { column_name = { expression | subquery | DEFAULT } | ( column_name [, ...] ) = ( { expression | subquery | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | subquery | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ]; NOTICE: 'subquery' in the UPDATE and INSERT clauses are only available in CENTRALIZED mode!
  • 示例 -- 删除schema drop schema if exists pkg_var_test cascade; -- 创建pkg_var_test create schema pkg_var_test; -- 设置schema和参数 set current_schema = pkg_var_test; set behavior_compat_options ='plpgsql_dependency'; -- 创建包 create or replace package test_pkg as referenced_var int; unreferenced_var int; end test_pkg; / -- 创建函数 create or replace function test_func return int is begin return 1; end; / -- 创建存储过程 create or replace procedure test_proc is proc_var int; begin proc_var := 1; end; / -- 重编译pkg_var_test下的包 函数和存储过程 call pkg_util.utility_compile_schema('pkg_var_test'); 或者 call pkg_util.gs_compile_schema(' ',false,2); -- 删掉pkg_var_test drop schema if exists pkg_var_test cascade;
  • 示例 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 --创建dev_audit和bob_audit用户。 gaussdb=# CREATE USER dev_audit PASSWORD '********'; gaussdb=# CREATE USER bob_audit PASSWORD '********'; --创建一个表tb_for_audit。 gaussdb=# CREATE TABLE tb_for_audit(col1 text, col2 text, col3 text); --创建资源标签。 gaussdb=# CREATE RESOURCE LABEL adt_lb0 ADD TABLE(tb_for_audit); --对数据库执行create操作创建审计策略。 gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; --对数据库执行select操作创建审计策略。 gaussdb=# CREATE AUDIT POLICY adt2 AC CES S SELECT; --仅审计记录用户dev_audit和bob_audit在执行针对adt_lb0资源进行的create操作数据库创建审计策略。 gaussdb=# CREATE AUDIT POLICY adt3 PRIVILEGES CREATE ON LABEL(adt_lb0) FILTER ON ROLES(dev_audit, bob_audit); --仅审计记录用户dev_audit和bob_audit,客户端工具为gsql,IP地址为'10.20.30.40', '127.0.0.0/24',在执行针对adt_lb0资源进行的select、insert、delete操作数据库创建审计策略。 gaussdb=# CREATE AUDIT POLICY adt4 ACCESS SELECT ON LABEL(adt_lb0), INSERT ON LABEL(adt_lb0), DELETE FILTER ON ROLES(dev_audit, bob_audit), APP(gsql), IP('10.20.30.40', '127.0.0.0/24'); --删除审计策略。 gaussdb=# DROP AUDIT POLICY adt1, adt2, adt3, adt4; --删除资源标签。 gaussdb=# DROP RESOURCE LABEL adt_lb0; --删除表tb_for_audit。 gaussdb=# DROP TABLE tb_for_audit; --删除dev_audit和bob_audit用户。 gaussdb=# DROP USER dev_audit, bob_audit;
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复; 取值范围:字符串,要符合标识符命名规范。 resource_label_name 资源标签名称。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW。 取值为ANALYZE时,ANALYZE和VACUUM操作都会被审计。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 ALL 指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL | ALL }时,ALL指所有DDL操作;当形式为{ DML | ALL }时,ALL指所有DML操作。 filter_type 描述策略过滤的条件类型,包括APP、ROLES、IP。 filter_value 指具体过滤信息内容。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
共100000条