华为云用户手册

  • UltraISO软件操作步骤 下载UltraISO,并安装至本地。 下载地址:https://www.ultraiso.com/ 下载virtio驱动。 下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso 其他版本获取地址如下: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 使用UltraISO打开ISO文件,如图1所示。 图1 打开ISO文件 ISO格式的镜像文件请使用UltraISO工具打开,请勿使用普通压缩工具打开,否则会丢失ISO的引导数据。 将下载的virtio驱动文件整体拖到ISO文件父节点下。 在UltraISO中,将已集成virtio驱动的ISO文件另存为iso格式,导出至本地。
  • 操作场景 由于Windows操作系统采用ide磁盘和virtio网卡,因此需要在注册为云平台的镜像前,先在Windows操作系统的ISO文件中集成virtio驱动。由于ISO通常是将光盘文件做成一个文件,而部分光盘软件设定只能从光驱进行安装,直接解压后无法使用,因此需要用到虚拟光驱软件。 本节操作以AnyBurn、UltraISO软件为例,介绍如何为ISO文件集成virtio驱动。 AnyBurn是一款轻量级但专业的CD/DVD/蓝光刻录软件,并提供免费版本。 UltraISO是收费软件,试用版的UltraISO软件不能保存大小超过300M的ISO文件,请使用正式版本的软件。 virtio是一种用于虚拟化环境的标准化设备接口,旨在提高虚拟机(VM)与宿主机之间的I/O性能。关于virtio驱动程序的详细解释可以参考官网,virtio-win/kvm-guest-drivers-windows开源代码请参见https://github.com/virtio-win/kvm-guest-drivers-windows。
  • AnyBurn软件操作步骤 下载AnyBurn,并安装至本地。 下载virtio驱动。 下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso 其他版本获取地址如下: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 使用AnyBurn打开ISO文件。 打开AnyBurn软件,选择“编辑镜像文件”。 选择ISO文件,单击“下一页”。 编辑ISO文件,集成virtio驱动。 解压步骤2中下载的“virtio-win.iso”文件。 单击“增加”,将解压后的所有文件添加到ISO文件父节点下,单击“下一步”。 指定保存的路径及ISO文件名称,选择文件保存为ISO格式,单击“开始生成”。 生成ISO文件结束后,请在保存路径下查看集成virtio驱动的ISO文件。
  • 上传镜像文件 推荐您使用OBS Browser+工具将外部镜像文件上传至OBS个人桶,详细操作请参见“OBS Browser+最佳实践”。 OBS Browser+工具下载方式:https://support.huaweicloud.com/browsertg-obs/obs_03_1003.html 桶文件要和待注册的镜像属于同一区域。 上传到OBS桶的外部镜像文件必须是非加密状态的或者采用SSE-KMS加密方式加密的文件。 上传到OBS桶的外部ISO镜像文件仅支持非加密状态。 上传到OBS桶的外部镜像文件使用快速导入功能时仅支持非加密状态。 OBS桶和镜像文件的存储类别必须是标准存储。 如果您希望在创建系统盘镜像时携带数据盘一起创建,还需要准备数据盘所在的镜像文件,并将该文件上传至OBS桶。最终将生成一个系统盘镜像、一个或多个(1~3个)数据盘镜像。
  • 使用镜像创建弹性云服务器 请按照通过镜像创建云服务器中的操作指导创建弹性云服务器。 在配置参数时,需要注意以下几点: 区域:必须选择私有镜像所在的区域。 规格:在选择规格时,需要结合镜像的操作系统类型以及“弹性云服务器类型与支持的操作系统版本”了解支持选择的规格范围。 镜像:选择“私有镜像”,并在下拉列表中选择所创建的私有镜像。 (可选)数据盘:添加数据盘,该数据盘使用随系统盘镜像一起创建出来的数据盘镜像来创建,这样便可以将原平台虚拟机的系统盘和数据盘数据一起迁移到当前云平台。
  • 约束与限制 镜像文件支持如下格式:VMDK、VHD、QCOW2、RAW、VHDX、QED、VDI、QCOW、ZVHD2和ZVHD。 镜像文件大小不超过128GB。 如果镜像大小介于128GB和1TB之间,需要将镜像文件转换为RAW或ZVHD2格式,然后使用快速导入功能进行导入。 参考“通过qemu-img-hw工具转换镜像格式”转换镜像格式。 参考“快速导入镜像文件”了解快速导入功能。 支持的操作系统版本请参考“外部镜像文件支持的格式和操作系统类型”,在此范围内的操作系统支持后台自动化配置(详情请参阅“通过镜像文件注册私有镜像过程中,系统会对镜像做哪些修改?”),在此之外的操作系统请您自行排查及安装驱动(Windows系统参见安装PV driver和安装virtio驱动) (Linux系统详见XEN虚拟化E CS 安装原生的XEN和KVM驱动),在注册镜像页面选择Other Windows或Other Linux,导入后系统启动情况取决于驱动完备度。 操作系统不能与特定的硬件绑定。 操作系统必须支持全虚拟化。 暂不支持创建带有数据盘的镜像,镜像文件中必须只能包含系统盘,且系统盘大小范围为:[40GB, 1024GB] 镜像文件的初始密码至少包含以下4种字符:大写字母、小写字母、数字、特殊字符(!@$%^-_=+[{}]:,./?) 镜像启动分区和系统分区必须包含在同一个磁盘中。 外部镜像文件必须包含可用的Tenant Administrator账号和密码。 通过外部镜像文件创建的Windows系统盘镜像,在创建云服务器时,不支持密钥对登录方式,也无法通过密钥对获取密码。 支持的镜像引导方式: x86架构部分操作系统镜像支持UEFI启动方式(查看支持UEFI启动方式的操作系统)。 ARM架构操作系统镜像仅支持UEFI启动方式。 镜像文件必须为非加密,否则可能导致镜像注册后创建的云服务器无法正常使用。 VMDK格式的镜像文件必须是从VMWare Tools中导出后的虚拟机生成的文件,否则可能会因镜像解析问题导致系统无法正常启动。
  • 通过云服务器或备份创建私有镜像概述 私有镜像是包含操作系统或业务数据、预装的公共应用以及用户的私有应用的镜像,仅用户个人可见。 镜像服务 提供了多种创建私有镜像的方式,您可以根据实际情况选择合适的创建方式。 表1 创建私有镜像方式说明 创建私有镜像方式分类 适用场景 相关链接 通过云服务器或备份创建私有镜像 如果您已经在华为云创建了一台云服务器,并根据业务需要进行了自定义配置(如安装软件、部署应用环境等)。 系统盘镜像:包含系统盘中的操作系统及应用软件。 数据盘镜像:包含数据盘上的业务数据。 整机镜像:包含系统盘的操作系统及应用软件及数据盘中的业务数据。 通过云服务器创建系统盘镜像 通过云服务器创建整机镜像 通过云服务器备份创建整机镜像 通过云备份创建整机镜像 通过镜像文件创建私有镜像 您可以将本地或者其他云平台的镜像文件导入至华为云镜像服务私有镜像中。导入后,您可以使用该镜像创建新的云服务器或数据盘,或为已有云服务器切换操作系统,实现业务上云或云上迁移。 通过镜像文件创建私有镜像概述 父主题: 通过云服务器或备份创建私有镜像
  • 操作场景 本节指导您基于Windows操作系统环境完成镜像文件快速导入,推荐使用Windows系统本地PC作为转换镜像格式和生成位表文件的环境。 Windows操作系统环境下,必须使用开源qemu-img工具进行镜像格式转换,qemu-img支持vhd、vmdk、qcow2、raw、vhdx、qcow、vdi或qed格式的镜像的相互转换,因此需要转换为raw格式,再使用CreateMF.jar工具生成位表文件。
  • 流程说明 通过外部镜像文件创建数据盘镜像的过程如下: 图1 创建过程 准备符合格式要求的外部镜像文件。当前支持vhd、vmdk、qcow2、raw、vhdx、qcow、vdi、qed、zvhd或zvhd2格式,其他镜像文件,需要转换格式后再导入。 镜像格式转换可参考“通过qemu-img工具转换镜像格式”或“通过qemu-img-hw工具转换镜像格式”。 上传外部镜像文件到OBS个人桶中,注意OBS桶和镜像文件的存储类别必须是标准存储。具体操作可参考上传镜像文件。 创建数据盘镜像,具体操作请参见操作步骤。 使用数据盘镜像创建新的数据盘,具体操作请参见后续操作。
  • 后续操作 数据盘镜像创建成功后,您可能需要创建新的数据盘并挂载到目标云服务器上,有两种方法供您参考: 在创建好的数据盘镜像所在行,单击“申请数据盘”创建新的数据盘(支持批量创建),然后挂载至目标云服务器。 在创建弹性云服务器向导页面,为云服务器添加数据盘时,单击“用数据盘镜像创建磁盘”,然后选择一个数据盘镜像。 此方式下,每个数据盘镜像只可以用来创建一个数据盘,不能重复选择。例如,为云服务器添加了一块数据盘,这个数据盘来源是数据盘镜像data_disk_image,如果想再添加一块数据盘,则不能使用数据盘镜像data_disk_image来创建。 图3 添加数据盘
  • 通过镜像文件创建私有镜像概述 私有镜像是包含操作系统或业务数据、预装的公共应用以及用户的私有应用的镜像,仅用户个人可见。 您可以将本地或者其他云平台的镜像文件导入至华为云镜像服务私有镜像中。导入后,您可以使用该镜像创建新的云服务器或数据盘,或为已有云服务器切换操作系统,实现业务上云或云上迁移。 请参考下表根据镜像文件的格式或者大小选择私有镜像创建方式。 表1 通过镜像文件创建私有镜像方式分类 镜像文件格式 镜像文件大小 相关链接 vmdk、vhd、qcow2、vhdx、qed、vdi、qcow和zvhd 不超过128GB 通过外部镜像文件创建系统盘镜像 通过外部镜像文件创建数据盘镜像 raw、zvhd2 不超过1TB 快速导入镜像文件 通过外部镜像文件创建数据盘镜像 iso 不超过128GB 通过ISO文件创建Windows系统盘镜像 通过ISO文件创建Linux系统盘镜像 您也可以通过云服务器或备份创建私有镜像,具体请参见通过云服务器或备份创建私有镜像概述。 父主题: 通过镜像文件创建私有镜像
  • 最佳实践 华为云Flexus云服务提供了部分最佳实践,本文介绍华为云Flexus云服务各产品的最佳实践文档索引。 产品类型 内容说明 文档索引 Flexus应用服务器 L实例 介绍使用应用镜像、搭建跨境电商、服务器迁移等实践。 Flexus L实例最佳实践 Flexus云服务器X实例 介绍服务器通过MgC迁移至Flexus X实例等实践。 Flexus X实例最佳实践 Flexus云数据库RDS 介绍通过DRS将其他云MySQL数据迁移到FlexusRDS for MySQL实例。 FlexusRDS最佳实践
  • 审计 云审计 服务(Cloud Trace Service, CTS ) CTS是华为 云安全 解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 用户开通云审计服务并创建和配置追踪器后,CTS可记录RDS的管理事件和数据事件用于审计。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 CTS支持追踪的RDS for PostgreSQL管理事件和数据事件列表,请参见支持审计的关键操作列表。 数据库安全服务(Database Security Service,DBSS) DBSS是一个智能的数据库安全服务,基于机器学习机制和大数据分析技术,提供数据库审计,SQL注入攻击检测,风险操作识别等功能,保障云上数据库的安全。 建议使用DBSS来提供扩展的数据安全能力,详情请参考数据库安全服务。 优势: 助力企业满足等保合规要求。 满足等保测评数据库审计需求。 满足国内外安全法案合规需求,提供满足数据安全标准(例如Sarbanes-Oxley)的合规报告。 支持备份和恢复数据库审计日志,满足审计数据保存期限要求。 支持风险分布、会话统计、会话分布、SQL分布的实时监控能力。 提供风险行为和攻击行为实时告警能力,及时响应数据库攻击。 帮助您对内部违规和不正当操作进行定位追责,保障数据资产安全。 数据库安全审计采用数据库旁路部署方式,在不影响用户业务的前提下,可以对数据库进行灵活的审计。 基于数据库风险操作,监视数据库登录、操作类型(数据定义、数据操作和数据控制)和操作对象,有效对数据库进行审计。 从风险、会话、SQL注入等多个维度进行分析,帮助您及时了解数据库状况。 提供审计报表模板库,可以生成日报、周报或月报审计报表(可设置报表生成频率)。同时,支持发送报表生成的实时告警通知,帮助您及时获取审计报表。
  • 数据保护技术 云数据库RDS通过多种数据保护手段和特性,保障存储在RDS中的数据安全可靠。 表1 RDS的数据保护手段和特性 数据保护手段 简要说明 详细介绍 传输加密(SSL) 支持SSL传输协议,保证数据传输的安全性。 通过psql命令行内网连接实例 跨可用区部署 为了达到更高的可靠性,RDS支持选择多可用区部署主实例和备实例,可用区之间内网互通,不同可用区之间物理隔离,RDS会自动将主实例和备实例分布到不同的可用区,以提供故障切换能力和高可用性。 购买实例选择跨可用区部署 删除保护 云数据库RDS支持将退订后的包年包月实例和删除的按需实例,加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 回收站 跨区域备份 云数据库RDS支持将备份文件存放到另一个区域存储,某一区域的实例故障后,可以在异地区域使用备份文件在异地恢复到新的RDS实例,用来恢复业务。 设置跨区域备份策略 父主题: 安全
  • 访问控制 权限控制 购买实例之后,您可以使用 IAM 为企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,通过IAM进行精细的权限管理。具体内容请参见权限管理。 VPC和子网 虚拟私有云(Virtual Private Cloud,VPC)为云数据库构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。您可以在VPC中定义安全组、VPN、IP地址段、带宽等网络特性,方便管理、配置内部网络,进行安全、快捷的网络变更。 子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全性。 具体内容请参见创建虚拟私有云和子网。 安全组 安全组是一个逻辑上的分组,为同一个虚拟私有云内具有相同安全保护需求并相互信任的弹性云服务器和云数据库RDS实例提供访问策略。为了保障数据库的安全性和稳定性,在使用RDS数据库实例之前,您需要设置安全组,开通需访问数据库的IP地址和端口。 具体请参见添加安全组规则。
  • 身份认证 用户访问云数据库RDS时支持对数据库用户进行身份验证,包含密码验证和IAM验证两种方式。 密码验证 您需要对数据库实例进行管理,使用数据管理服务(Data Admin Service)登录数据库时,需要对账号密码进行验证,验证成功后方可进行操作。 IAM验证 您可以使用 统一身份认证 服务(Identity and Access Management, IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。您创建的IAM用户,需要通过验证用户和密码才可以使用云数据库RDS资源。具体请参见创建IAM用户并登录。
  • 常见问题 为什么要下线云数据库RDS for PostgreSQL 10、11版本? PostgreSQL开源社区已分别于2022/11/10停止维护(EOL)PostgreSQL 10版本,于2023/11/09停止维护(EOL)PostgreSQL 11版本。 云数据库RDS for PostgreSQL 10、11版本下线后,正在使用中的该版本实例怎么办? 建议用户将正在使用中的该版本实例升级到最新版本,我们能够继续为您提供高水平的服务。升级方法请参考大版本升级,或通过数据库迁移的方式进行大版本升级。 云数据库RDS for PostgreSQL 10、11版本下线后,还需要购买实例怎么办? 建议用户选择使用最新版本在售实例,体验更丰富的版本能力。
  • 常见问题 为什么要下线云数据库RDS for PostgreSQL 9.5、9.6版本? PostgreSQL开源社区已分别于2021/02/11停止维护(EOL)PostgreSQL 9.5版本,于2021/11/11停止维护(EOL)PostgreSQL 9.6版本。 云数据库RDS for PostgreSQL 9.5、9.6版本下线后,正在使用中的该版本实例怎么办? 建议用户将正在使用中的该版本实例升级到最新版本,我们能够继续为您提供高水平的服务。升级方法请参考大版本升级,或通过数据库迁移的方式进行大版本升级。 云数据库RDS for PostgreSQL 9.5、9.6版本下线后,还需要购买实例怎么办? 建议用户选择使用最新版本在售实例,体验更丰富的版本能力。
  • UDF相关GUC参数 udf_memory_limit 系统级别的GUC参数,用于限制每个CN、DN执行UDF可以使用的物理内存量,默认为0.05 * max_process_memory。可通过修改postgresql.conf文件进行配置,配置后需要重启数据库服务后才可生效。 udf_memory_limit是max_process_memory的一部分。每个CN、DN启动时,会预留(udf_memory_limit - 200MB)内存供UDF Worker进程使用。CN、DN和UDF Worker是不同的进程,但CN、DN自动少用一部分内存,把这部分内存节省下来供UDF Worker进程使用。 例如:在某DN上把max_process_memory设置为10GB,udf_memory_limit设置为4GB,则此DN最多使用10GB - (4GB - 200MB)=6.2GB内存。即使用户没有执行任何UDF,则此DN也最多只能使用6.2GB内存。默认情况下,udf_memory_limit为0.05 * max_process_memory。查询pv_total_memory_detail视图时可以发现,process_used_memory永远不会超过max_process_memory - (udf_memory_limit - 200MB)。 UDF进程断连时会有报错提示。当出现“memory in UDF Work Process is limited by cgroup: [usage: xxx, max_usage_history: xxx, limit: xxx]”时,可以根据提示判断当前内存使用情况。报错中的usage表示UDF进程被KILL后剩余UDF进程的总物理内存使用量;max_usage_history表示UDF实例启动后历史上使用过的最大内存量,limit表示UDF进程使用内存的最大限制量。如果max_usage_history值接近limit值说明当前集群存在内存超过限制的风险,需要优化业务或按实际情况调整udf_memory_limit参数限制。 一个CN执行最简单的Java UDF函数,使用的物理内存量大约为50MB,用户可以根据自己Java函数的内存使用量和并发度设置此参数。新增此参数后,不再建议用户设置UDFWorkerMemHardLimit和FencedUDFMemoryLimit。 当UDF进程并发度过大,内存超出udf_memory_limit设置值时会导致进程退出等非预期情况,该场景下执行结果可能不可靠,强烈建议根据实际情况进行参数设置,保留足够内存余量。如果系统记录有/var/log/messages,可查看该日志文件是否存在因超过cgroup内存限制而造成内存不足。内存严重不足时,甚至可能导致UDF master进程退出,可以查看UDF日志进行分析,默认的UDF日志路径在$GAUSS LOG /cm/cm_agent/pg_log下。例如,出现以下日志时就说明内存资源严重不足,导致了UDF master进程退出,需要检查udf_memory_limit参数设置。 0 [BACKEND] FATAL: poll() failed: Bad address, please check the parameter:udf_memory_limit to make sure there is enough memory. FencedUDFMemoryLimit 会话级别的GUC参数,用户限制会话发起的单个Fenced UDF Worker进程的最大虚拟内存使用量,设置方法如下: SET FencedUDFMemoryLimit='512MB'; 该参数的取值范围为 (150MB, 1G],当设置大于1G时会立即报错,当设置小于等于150MB时,则会在调用函数时报错。 FencedUDFMemoryLimit设置为0,表示不控制Fenced UDF Worker的虚拟内存使用量。 建议通过设置udf_memory_limit控制Fenced UDF Worker使用的物理内存量。不建议用户使用FencedUDFMemoryLimit,尤其在使用Java UDF时不建议用户设置此参数。但是如果用户非常清楚设置该参数带来的影响,可以参考下列信息进行设置: C UDF worker启动之后,占用的虚拟内存约为200MB,占用的物理内存约为16MB。 Java UDF worker启动之后,占用的虚拟内存约为2.5GB,占用的物理内存约为50MB。
  • 日志 PL/Java使用标准的Java Logger。 因此,用户可以通过如下方式记录日志: Logger.getAnonymousLogger().config( "Time is " + new Date(System.currentTimeMillis())); 初始化的Java Logger类会默认设置为CONFIG级别,对应为 GaussDB (DWS)的LOG级别。Java Logger类输出的日志消息都会重定向到GaussDB(DWS)后端,并写入到服务器日志或显示在用户界面上。MPPDB服务器日志将记录LOG、WARNING、ERROR级别的信息,而SQL用户界面将显示WARNING和ERROR级别的日志消息。Java Logger级别与GaussDB(DWS)的日志级别对应关系见下表。 表2 PL/Java日志级别 java.util.logging.Level GaussDB(DWS) 日志级别 SERVER ERROR WARNING WARNING CONFIG LOG INFO INFO FINE DEBUG1 FINER DEBUG2 FINEST DEBUG3 用户可以通过以下方式更改Java Logger的记录级别。例如通过下面的Java代码修改Java Logger级别为SEVERE,此时再记录WARNING级别的日志时,日志消息(msg)就不会再写入到GaussDB(DWS)日志中。 Logger log = Logger.getAnonymousLogger(); Log.setLevel(Level.SEVERE); log.log(Level.WARNING, msg);
  • UDF示例:重载函数 PL/Java支持重载函数,因此可以创建同名函数,或者调用Java代码中的重载方法。步骤如下: 创建重载函数 例如,在Java中可以实现两个方法名相同,输入参数类型不同的方法dummy(int) 和dummy(String) public class Example { public static int dummy(int value) { return value*2; } public static String dummy(String value) { return value; } } 并在GaussDB(DWS)中创建两个同名函数分别指定为上述两个方法: CREATE FUNCTION java_dummy(INTEGER) RETURNS INTEGER AS 'Example.dummy' LANGUAGE JAVA; CREATE FUNCTION java_dummy(VARCHAR) RETURNS VARCHAR AS 'Example.dummy' LANGUAGE JAVA; 调用重载函数 在调用重载函数时,GaussDB(DWS)会根据输入的参数类型去调用匹配该类型的Java方法。因此上述两个函数的调用结果如下所示: SELECT java_dummy(5); java_dummy ----------------- 10 (1 row) SELECT java_dummy('5'); java_dummy --------------- 5 (1 row) 需要注意的是,由于GaussDB(DWS)对数据类型存在隐式转换的情况,因此建议在调用重载函数时,指定输入参数的类型,例如: SELECT java_dummy(5::varchar); java_dummy ---------------- 5 (1 row) 此时会优先匹配所指定的参数类型,如果不存在指定参数类型的Java方法,则会对参数进行隐式转换匹配转换后的参数类型对应的Java方法。 SELECT java_dummy(5::INTEGER); java_dummy ----------------- 10 (1 row) DROP FUNCTION java_dummy(INTEGER); SELECT java_dummy(5::INTEGER); java_dummy ---------------- 5 (1 row) 隐式转换的数据类型包括: 可以默认转换为INTEGER类型的包括:SMALLINT 可以默认转换为BIGINT类型的包括:SMALLINT、INTEGER 可以默认转换为BOOL类型的包括:TINYINT、SMALLINT、INTEGER、BIGINT 可以默认转换为TEXT类型的包括:CHAR、NAME、BIGINT、INTEGER、SMALLINT、 TINYINT、RAW、FLOAT4、FLOAT8、BPCHAR、VARCHAR、NVARCHAR2、DATE、TIMESTAMP、TIMESTAMPTZ、NUMERIC、SMALLDATETIME 可以默认转换为VARCHAR类型的包括:TEXT、CHAR、BIGINT、INTEGER、SMALLINT、TINYINT、RAW、FLOAT4、FLOAT8、BPCHAR、DATE、NVARCHAR2、TIMESTAMP、NUMERIC、SMALLDATETIME 删除重载函数 对于重载函数,删除时需要指定函数的参数类型,否则无法删除。 DROP FUNCTION java_dummy(INTEGER);
  • 基本数据类型映射关系 表1 PL/Java默认数据类型映射关系 GaussDB(DWS) Java BOOLEAN boolean "char" byte bytea byte[] SMALLINT short INTEGER int BIGINT long FLOAT4 float FLOAT8 double CHAR java.lang.String VARCHAR java.lang.String TEXT java.lang.String name java.lang.String DATE java.sql.Timestamp TIME java.sql.Time (stored value treated as local time) TIMETZ java.sql.Time TIMESTAMP java.sql.Timestamp TIMESTAMPTZ java.sql.Timestamp
  • UDF示例:数组类型处理 GaussDB(DWS)支持基础数组类型的转换,只需要在创建函数时在数据类型后追加 [] 即可,例如: CREATE FUNCTION java_arrayLength(INTEGER[]) RETURNS INTEGER AS 'Example.getArrayLength' LANGUAGE JAVA; Java代码类似于: public class Example { public static int getArrayLength(Integer[] intArray) { return intArray.length; } } 那么下面的调用的语句后: SELECT java_arrayLength(ARRAY[1, 2, 3]); 得到预期结果应该如下所示: java_arrayLength --------------------- 3 (1 row)
  • Java UDF使用流程 使用PL/Java函数时,用户可以使用Java IDE编写Java方法,并将包含这些方法的jar包文件部署到GaussDB(DWS)数据库中,然后使用数据库管理员账号创建函数。考虑兼容性问题,请使用1.8.0.432版本的JRE进行编译。 编译jar包。 Java方法的实现和出包可以借助IDE来实现,以下是一个通过命令行来进行编译和出包的简单的示例,通过这个简单示例可以创建出一个包含单个方法的jar包文件。 首先,编写一个Example.java文件,在此文件中实现子字符串大写转换的方法,本例中类名为Example,方法名为upperString,内容如下: 1 2 3 4 5 6 7 public class Example { public static String upperString (String text, int beginIndex, int endIndex) { return text.substring(beginIndex, endIndex).toUpperCase(); } } 然后,创建manifest.txt清单文件,文件内容如下: 1 2 3 4 5 6 Manifest-Version: 1.0 Main-Class: Example Specification-Title: "Example" Specification-Version: "1.0" Created-By: 1.6.0_35-b10-428-11M3811 Build-Date: 08/14/2018 10:09 AM 其中,Manifest-Version定义了manifest文件的版本,Main-Class定义了jar文件的入口类,Specification-Title和Specification-Version属于包的扩展属性,Specification-Title定义了扩展规范的标题,Specification-Version定义了扩展规范的版本,Created-By声明了该文件的生成者,Build-Date声明了该文件构建日期。 最后,编译java文件并打包得到javaudf-example.jar 1 2 javac Example.java jar cfm javaudf-example.jar manifest.txt Example.class jar包的命名规则应符合JDK命名要求,如果含有非法字符,在部署或者使用函数时将出错。 部署jar包。 Jar包首先需要放置到OBS服务器中,放置方法具体请参见《 对象存储服务 控制台指南》的上传文件章节。接着创建访问密钥AK/SK,获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)章节。登录数据库运行gs_extend_library函数,将文件导入到GaussDB(DWS)中: 1 SELECT gs_extend_library('addjar', 'obs://bucket/path/javaudf-example.jar accesskey=access_key_value_to_be_replaced secretkey=secret_access_key_value_to_be_replaced region=region_name libraryname=example'); gs_extend_library函数如何使用请参见 管理jar包和文件。函数中的AK/SK值,请用户根据实际获取值替换。region_name请用户根据实际所在的区 域名 称替换。 使用PL/Java函数。 首先,使用拥有sysadmin权限的数据库用户(例如:dbadmin)登录数据库并创建java_upperstring函数如下: 1 2 3 4 CREATE FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER) RETURNS VARCHAR AS 'Example.upperString' LANGUAGE JAVA; 函数java_upperstring中定义的数据类型为GaussDB(DWS)的数据类型。该数据类型需要和步骤1中java定义的方法upperString中数据类型一一对应。GaussDB(DWS)与Java数据类型的对应关系,请参见表1。 AS子句用于指定该函数所调用的Java方法的类名和static方法名,格式为“类名.方法名”。该字段需要和步骤1中java定义的类名和方法名一致。 使用PL/Java函数时,LANGUAGE字段应指定为JAVA。 CREATE FUNCTION更多说明,请参见创建函数。 然后,执行java_upperstring函数: 1 SELECT java_upperstring('test', 0, 1); 得到预期结果为: 1 2 3 4 java_upperstring --------------------- T (1 row) 授权普通用户使用PL/Java函数。 创建普通用户,名称为udf_user。 1 CREATE USER udf_user PASSWORD 'password'; 授权普通用户udf_user对java_upperstring函数的使用权限。注意,此处需要把函数所在模式和函数的使用权限同时赋予给用户,用户才可以使用此函数。 1 2 GRANT ALL PRIVILEGES ON SCHEMA public TO udf_user; GRANT ALL PRIVILEGES ON FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER) TO udf_user; 以普通用户udf_user登录数据库。 1 SET SESSION SESSION AUTHORIZATION udf_user PASSWORD 'password'; 执行java_upperstring函数: 1 SELECT public.java_upperstring('test', 0, 1); 得到预期结果为: 1 2 3 4 java_upperstring --------------------- T (1 row) 删除函数。 如果不再使用该函数可以进行删除: 1 DROP FUNCTION java_upperstring; 卸载jar包。 使用gs_extend_library函数卸载jar包: 1 SELECT gs_extend_library('rmjar', 'libraryname=example');
  • 使用限制 Java UDF可以实现一些java逻辑计算,强烈建议不要在Java UDF中封装业务 强烈建议不要在Java函数中使用任何方式连接数据库,包括但不限于JDBC。 暂不支持的数据类型:除表1内容之外的数据类型,包括自定义类型,复杂数据类型(Java Array类及派生类)。 暂不支持UDAF,UDTF。 GaussDB(DWS) PL/Java基于开源PL/Java 1.5.5开发,所使用的JRE版本为1.8.0.432。
  • 应用示例 查询指定schema下的所有表字段信息: 1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM DBA_TAB_COLUMNS WHERE schema = 'public'; owner | table_name | column_name | data_type | column_id | data_length | comments | avg_col_len | nullable | data_precision | data_scale | char_length | schema | kind ---------+------------+-------------+-----------+-----------+-------------+----------+-------------+----------+----------------+------------+-------------+--------+------- dbadmin | t_customer | id | int4 | 1 | 4 | 主键 | | n | | 0 | 0 | public | table dbadmin | student | sschool | varchar | 4 | 10 | | | n | | 0 | 10 | public | table dbadmin | student | sgender | varchar | 3 | 10 | | | n | | 0 | 10 | public | table dbadmin | student | sname | varchar | 2 | 10 | | | n | | 0 | 10 | public | table dbadmin | student | sid | varchar | 1 | 10 | | | n | | 0 | 10 | public | table dbadmin | t_customer | email | varchar | 4 | 32 | email | | n | | 0 | 32 | public | table dbadmin | t_customer | gender | varchar | 3 | 10 | 性别 | | n | | 0 | 10 | public | table dbadmin | t_customer | cust_name | varchar | 2 | 32 | 名字 | | n | | 0 | 32 | public | table (8 rows)
  • show_acce_estimate_detail 参数说明:在GaussDB(DWS)集群使用加速集群场景下(即acceleration_with_compute_pool设置为on),控制explain命令是否显示用于评估执行计划下推到加速集群的评估信息。评估信息一般用于运维人员在维护工作中使用,因此该参数默认关闭,此外为了避免这些信息干扰正常的explain信息显示,只有在explain命令的verbose选项打开的情况下才显示评估信息。 参数类型:USERSET 取值范围:布尔型 on表示可以在explain命令的输出中显示评估信息。 off表示不在explain命令的输出中显示评估信息。 默认值:off
  • full_group_by_mode 参数说明:结合behavior_compat_options中disable_full_group_by_mysql使用,用于控制disable_full_group_by_mysql语法开关打开后的两种不同行为。 参数类型:USERSET 取值范围:字符串 nullpadding表示对于非聚集列而言,对该列NULL值进行填充,取该列非NULL值,结果集可能为不同行。 notpadding表示对于非聚集列而言,不处理NULL值,取该行整行数据,非聚集列结果集为随机的一行。 默认值:notpadding 该参数生效前提为MySQL兼容库下打开disable_full_group_by_mysql,且查询中出现非聚集列场景生效。该参数的两种行为也仅针对查询中的非聚集列生效。
  • enable_cudesc_streaming 参数说明:在存算分离架构下,控制跨逻辑集群访问是否选择cudesc streaming路径(从表所在逻辑集群获取cudesc、delta表数据等信息)。该参数仅9.1.0及以上集群版本支持。 参数类型:SUSET 取值范围:枚举型 off表示关闭cudesc streaming。 on表示开启cudesc streaming。 only_read_on表示只在数据读取时支持cudesc streaming。 默认值: on
  • enable_insert_foreign_table_dop_opt 参数说明:控制外表insert dop启用后,是否启用分区重分布优化。导出分区数较多时(导出分区数大于10倍分区数),建议开启,可以减少单分区内的小文件同时提高导出性能。该参数仅9.1.0.200及以上版本支持。 参数类型:USERSET 取值范围:布尔型 on表示启用分区外表insert dop重分布优化。 off表示禁用分区外表insert dop重分布优化。 默认值:off
共100000条
提示

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