华为云用户手册

  • 步骤一:获取文件 安装证书前,需要获取证书文件和密码文件,请根据申请证书时选择的“证书请求文件”生成方式来选择操作步骤: 如果申请证书时,“证书请求文件”选择“系统生成CSR”,具体操作请参见:系统生成CSR。 如果申请证书时,“证书请求文件”选择“自己生成CSR”,具体操作请参见:自己生成CSR。 具体操作如下: 系统生成CSR 在本地解压已下载的证书文件。 下载的文件包含了“Apache”、“IIS”、“Nginx”、“Tomcat”4个文件夹和1个“domain.csr”文件,如图1所示。 图1 本地解压SSL证书 从“证书ID_证书绑定的域名_Apache”文件夹内获得证书文件“证书ID_证书绑定的域名_ca.crt”,“证书ID_证书绑定的域名_server.crt”和私钥文件“证书ID_证书绑定的域名_server.key”。 “证书ID_证书绑定的域名_ca.crt”文件包括一段中级CA证书代码“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”。 “证书ID_证书绑定的域名_server.crt”文件包括一段服务器证书代码“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”。 “证书ID_证书绑定的域名_server.key”文件包括一段私钥代码“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。 自己生成CSR 解压已下载的证书压缩包,获得“证书ID_证书绑定的域名_server.pem”文件。 “证书ID_证书绑定的域名_server.pem”文件包括两段证书代码“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”,分别为服务器证书和中级CA证书。 复制“证书ID_证书绑定的域名_server.pem”文件的第一段证书代码(服务器证书),并另存为“server.crt”文件。 复制“证书ID_证书绑定的域名_server.pem”文件的第二段证书代码(中级CA),并另存为“ca.crt”文件。 将“ca.crt”、“server.crt”和生成CSR时的私钥“server.key”放在任意文件夹内。
  • 效果验证 部署成功后,可在浏览器的地址栏中输入“https://域名”,按“Enter”。 如果浏览器地址栏显示安全锁标识,则说明证书安装成功。 如果网站仍然出现不安全提示,请参见为什么部署了SSL证书后,网站仍然出现不安全提示?。 如果通过域名访问网站时,无法打开网站,请参见为什么部署了SSL证书后,通过域名访问网站时,无法打开网站?进行处理。 如果仍未解决或出现其他问题,华为云市场提供SSL证书配置优化服务,专业工程师一对一服务,请直接单击一对一咨询进行购买,购买服务后,联系工程师进行处理。
  • 步骤二:配置Resin 修改配置文件前,请将配置文件进行备份,并建议先在测试环境中进行部署,配置无误后,再在现网环境进行配置,避免出现配置错误导致服务不能正常启动等问题,影响您的业务。 (可选)安装Resin。 如果已安装,则请跳过该步骤。 登录Resin官网并根据您的系统下载不同的应用程序包。 本步骤以下载Windows版本的Resin-4.0.38版本为例进行说明。 解压下载的Resin包。 进入Resin-4.0.38根目录并找到resin.exe文件。 运行resin.exe文件,运行期间将出现如图2所示的命令提示符窗口。 图2 提示窗口 运行完成后,启动浏览器,在Web地址栏中输入Resin默认地址“http://127.0.0.1:8080”,并按“Enter”。 当界面显示如图3所示时,则表示安装成功。 图3 登录Resin 修改配置文件。 在Resin安装目录下的“Resin.properties”配置文件(由于Resin版本的不同,配置文件也可能为“resin.xml”文件)中,找到如下参数: # specifies the --server in the config file # home_server : app-0 # Set HTTP and HTTPS bind address # http_address : * # Set HTTP and HTTPS ports. # Use overrides for individual server control, for example: app-0.http : 8081 app.http : 8080 # app.https : 8443 web.http : 8080 # web.https : 8443 将“app.https”和“web.https”前的注释符“#”去掉,并将“8443端”口修改为“443”。修改后,如下所示: “app.https”、“web.https”:指定服务器要使用的端口号,建议配置为“443”。 # specifies the --server in the config file # home_server : app-0 # Set HTTP and HTTPS bind address # http_address : * # Set HTTP and HTTPS ports. # Use overrides for individual server control, for example: app-0.http : 8081 app.http : 8080 app.https : 443 web.http : 8080 web.https : 443 找到如下参数,并将“jsse_keystore_tye”、“jsse_keystore_file”和“jsse_keystore_password”三行前的注释符“#”去掉。 # JSSE certificate configuration # Keys are typically stored in the resin configuration directory. jsse_keystore_tye : jks jsse_keystore_file : cert/server.jks jsse_keystore_password : 证书密码 修改证书相关配置参数,具体配置请参见表1。 # JSSE certificate configuration # Keys are typically stored in the resin configuration directory. jsse_keystore_tye : jks jsse_keystore_file : cert/server.jks jsse_keystore_password : 证书密码 表1 参数说明 参数 参数说明 jsse_keystore_tye 设定Keystore文件的类型,一般都设为jks jsse_keystore_file “server.jks”文件存放路径,绝对路径和相对路径均可。示例:cert/server.jks jsse_keystore_password “server.jks”的密码。填写“keystorePass.txt”文件内的密码。 须知: 如果密码中包含“&”,请将其替换成“&”,以免配置不成功。 示例: 如果keystorePass="Ix6&APWgcHf72DMu",则修改为keystorePass="Ix6&APWgcHf72DMu"。 修改完成后保存配置文件。 重启Resin。
  • 前提条件 已开通CDN(Content Delivery Network,内容分发网络),且已在CDN中配置了与SSL证书匹配的网站域名。 如果没有购买CDN,或数字证书所绑定的域名没有在CDN中开通服务,请不要将数字证书部署到CDN中,如果部署将可能导致部署失败。 已在云证书管理服务中申请SSL证书且状态为“已签发”,或者已将在其他平台签发的SSL证书上传至云证书管理服务中且状态为“托管中”。 证书为国际标准证书。
  • 步骤二:配置IIS 安装IIS,请参照IIS相关安装指导进行安装。 打开IIS管理控制台,双击“服务器证书”,如图2所示。 图2 服务器证书 在弹出的窗口中,单击“导入”,如图3所示。 图3 导入 导入“server.pfx”证书文件,单击“确定”。 “密码”配置框内需要输入“keystorePass.txt”文件内的密码。 图4 导入pfx证书文件 鼠标右键单击目标站点(这里以默认站点为例),选择“编辑绑定”,如图5所示。 图5 编辑绑定 在弹出的窗口中,单击“添加”,并填写以下信息。 图6 添加网站绑定 类型:选择“https”。 端口:保持默认的“443”端口即可。 SSL证书:选择4导入的证书。 填写完成后,单击“确定”。
  • 效果验证 部署成功后,可在浏览器的地址栏中输入“https://域名”,按“Enter”。 如果浏览器地址栏显示安全锁标识,则说明证书安装成功。 如果网站仍然出现不安全提示,请参见为什么部署了SSL证书后,网站仍然出现不安全提示?。 如果通过域名访问网站时,无法打开网站,请参见为什么部署了SSL证书后,通过域名访问网站时,无法打开网站?进行处理。 如果仍未解决或出现其他问题,华为云市场提供SSL证书配置优化服务,专业工程师一对一服务,请直接单击一对一咨询进行购买,购买服务后,联系工程师进行处理。
  • 约束条件 如果资源所有者与您属于同一组织,且启用“启用与组织共享资源”功能,将自动获得共享资源的访问权限,无需接受邀请。 如果资源所有者与您不属于同一组织,或者属于同一组织但未启用“启用与组织共享资源”功能,将收到加入资源共享实例的邀请。 资源共享实例的邀请默认保留7天,如果在到期前未接受邀请,系统会自动拒绝邀请,如还需使用共享资源,请再次创建共享实例以生成新的邀请。 若需要启用“启用与组织共享资源”功能,具体操作请参见启用与组织共享资源。
  • 修订记录 发布日期 修改说明 2024-05-30 第三十四次正式发布。 新增标签管理章节,增加对接TMS标签管理的描述。 刷新推送SSL证书到云产品章节,推送SSL证书至WAF时,可选择企业项目。 刷新查看已关联云资源章节,增加过期证书可查看部署记录的描述。 2024-03-15 第三十三次正式发布。 新增安装国密标准(SM2)SSL证书到Web服务器章节,增加国密证书安装的操作指导。 刷新查看SSL证书详情章节,补充关联资源的参数描述。 刷新查看已关联云资源章节,优化查看关联资源的步骤描述。 2023-12-15 第三十一次正式发布。 优化开启SSL证书到期自动替换章节,增加根证书校验场景的描述。 优化查看SSL证书详情章节,增加关于过期证书自动折叠不显示的相关描述。 2023-10-17 第三十次正式发布。 优化购买SSL证书章节,补充多年期证书显示剩余年数的描述。 优化删除SSL证书章节,补充批量删除证书功能的描述。 优化推送SSL证书到云产品,补充当推送证书到WAF、ELB时可勾选多个区域,实现多区域证书推送功能的描述。 优化查看SSL证书详情章节,优化修改证书名称和描述的步骤。 刷新域名证书监控章节,新增域名证书监控支持包周期付费的说明。 2023-08-17 第二十九次正式发布。 优化推送SSL证书到云产品章节,推送SSL证书至云产品约束条件。 2023-06-30 第二十八次正式发布。 新增域名证书监控章节。 新增CSR管理章节。 优化申请SSL证书章节,多域名证书,主域名同时支持绑定泛域名和单域名。 2023-06-12 第二十七次正式发布。 优化吊销SSL证书约束限制。 2023-04-17 第二十六次正式发布。 新增开启SSL证书到期自动替换和关闭SSL证书到期自动替换章节。 2023-04-10 第二十五次正式发布。 优化重新签发章节内容,CFCA 品牌、TrustAsia品牌和vTrus品牌签发后,重签时间限制为25天。 2023-03-24 第二十四次正式发布。 优化重新签发章节内容,免费证书不支持重新签发。 2023-02-21 第二十三次正式发布。 优化在Tomcat服务器上安装SSL证书、在Nginx服务器上安装SSL证书、在Apache服务器上安装SSL证书,增加操作系统、服务器版本说明。 2023-01-19 第二十二次正式发布。 刷新方式二:手动DNS验证章节,修改记录类型说明。 优化方式三:文件验证(IP证书&DV证书),章节,新增创建文件夹示例。 2023-01-11 第二十一次正式发布。 刷新方式二:手动DNS验证章节,新增DNS验证结果审核说明。 刷新方式三:文件验证(IP证书&DV证书)章节,说明仅IP证书支持文件验证。 新增查看已关联云资源章节。 2022-12-23 第二十次正式发布。 优化手动续费、自动续费章节。 2022-11-16 第十九次正式发布。 优化SCM自定义策略。 刷新提交SSL证书申请章节内容,增加vTrus品牌资料补充说明。 2022-11-03 第十八次正式发布。 新增TrustAsia、vTrus两个品牌。 2022-10-31 第十七次正式发布。 优化文档架构。用户指南拆分为SSL证书管理和私有证书管理两本手册。 优化SCM权限管理、SCM关键操作审计管理以及部署国际标准SSL证书到华为云产品章节内容。 2022-09-29 第十六次正式发布。 优化在Tomcat服务器上安装SSL证书、在Nginx服务器上安装SSL证书、在Apache服务器上安装SSL证书、在IIS服务器上安装SSL证书、在Weblogic服务器上安装SSL证书、在Resin服务器上安装SSL证书章节内容。 2022-09-23 第十五次正式发布。 刷新提交SSL证书申请章节内容,新增根证书哈希算法、敏感词等描述。 优化重新签发章节内容,多域名证书不支持重新签发。 2022-08-30 第十四次正式发布。 刷新购买SSL证书章节内容,新增CFCA证书品牌。 优化续费SSL证书章节内容。 2022-08-09 第十三次正式发布。 优化购买SSL证书章节内容,根据控制台调整相关资料描述。 2022-07-27 第十二次正式发布。 优化方式二:手动DNS验证章节内容,增加域名验证解析说明、步骤五域名验证审核操作。 2022-07-11 第十一次正式发布。 优化购买SSL证书章节内容,支持购买多年期(2年或3年)SSL证书。 优化续费SSL证书章节内容,支持设置开通自动续费。 2022-06-22 第十次正式发布。 优化上传已有SSL证书章节内容,新增国密(SM)证书上传说明。 新增下载根证书章节内容。 2022-04-20 第九次正式发布。 新增部署国际标准SSL证书到华为云产品章节。 2021-11-26 第八次正式发布。 新增手动续费、分配SSL证书至企业项目章节。 2021-11-01 第七次正式发布。 根据界面控制台显示修改刷新资料。 调整文档架构。 新增申购SSL证书概述、购买SSL证书、提交SSL证书申请、域名验证、组织验证(OV、EV)、签发SSL证书章节。 2021-09-30 第六次正式发布。 新增退订SSL证书章节内容,支持在控制台直接退订SSL证书订单。 2021-06-15 第五次正式发布。 新增在Resin服务器上安装SSL证书章节内容。 2021-03-19 第四次正式发布。 刷新上传已有SSL证书章节内容,上传SSL证书支持到期邮件和短信提醒。 2021-03-12 第三次正式发布。 根据申请SSL证书优化后的界面刷新截图。 SSL证书管理新增自动DNS验证功能。 2021-01-26 第二次正式发布。 合入SSL证书管理相关功能。 增加重新签发章节。 2020-01-17 第一次正式发布。
  • 为MRS集群配置委托 配置存算分离支持在新建集群中配置委托实现,也可以通过为已有集群绑定委托实现。本示例以为已有集群配置委托为例介绍。 登录MRS控制台,在导航栏选择“现有集群”。 单击集群名称,进入集群详情页面。 在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“单击同步”进行IAM用户同步。 在集群详情页的“概览”页签,单击“委托”右侧的“管理委托”选择创建ECS委托的委托并单击“确定”进行绑定,或单击“新建委托”进入IAM控制台进行创建后再在此处进行绑定。 图3 绑定委托
  • Hive访问OBS文件系统 用root用户登录集群Master节点,具体请参见登录集群节点。 验证Hive访问OBS。 用root用户登录集群Master节点,执行如下命令: cd /opt/Bigdata/client source bigdata_env source Hive/component_env 查看文件系统mrs-demo01下面的文件列表。 hadoop fs -ls obs://mrs-demo01/ 返回文件列表即表示访问OBS成功。 图5 查看mrs-demo01下的文件列表 执行以下命令进行用户认证(普通模式即未开启Kerberos认证无需执行此步骤)。 kinit hive 输入用户hive密码,默认密码为Hive@123,第一次使用需要修改密码。 执行Hive组件的客户端命令。 beeline 在beeline中直接使用OBS的目录进行访问。例如,执行如下命令创建Hive表并指定数据存储在mrs-demo01文件系统的test_demo01目录中。 create table test_demo01(name string) location "obs://mrs-demo01/test_demo01"; 执行如下命令查询所有表,返回结果中存在表test_demo01,即表示访问OBS成功。 show tables; 图6 查看是否存在表test_demo01 查看表的Location。 show create table test_demo01; 查看表的Location是否为“obs://OBS桶名/”开头。 图7 查看表test_demo01的Location 写入数据。 insert into test_demo01 values('mm'),('ww'),('ww'); 执行select * from test_demo01;查询是否写入成功。 图8 查看表test_demo01中的数据 执行命令!q退出beeline客户端。 重新登录OBS控制台。 单击“并行文件系统”, 选择创建的文件系统名称。 单击“文件”,查看是否存在创建的数据。 图9 查看数据
  • 单实例单并发与单实例多并发的对比 当一个函数执行需要花费5秒,若配置为单实例单并发,三次函数调用请求分别在三个函数实例执行,总执行时长为15秒。 若配置为单实例多并发,设置单实例并发数为5,即单个实例最多支持5个并发请求,如果有三次函数调用请求,将在一个实例内并发处理,总执行时间为5秒。 单实例并发数大于1,在您设置的“单函数最大实例数”范围内,超过单实例并发处理能力时会自动扩容新实例。 表1 单并发与多并发对比 对比项 单实例单并发 单实例多并发 日志打印 - Node.js Runtime使用console.info()函数,Python Runtime使用print()函数,Java Runtime使用System.out.println()函数打印日志,该方式会把当前请求的Request ID包含在日志内容中。当多请求在同一个实例并发处理时,当前请求可能有很多个,继续使用这些函数打印日志会导致Request ID错乱。此时应该使用context.getLogger(),获取一个日志输出对象,通过这个日志输出对象打印日志,例如Python Runtime: log = context.getLogger() log.info("test") 共享变量 不涉及 单实例多并发处理时,修改共享变量会导致错误。这要求您在编写函数时,对于非线程安全的变量修改要进行互斥保护。 监控指标 按实际情况进行监控。 相同负载下,函数的实例数明显减少。 流控错误 不涉及 太多请求时,body中的errorcode为“FSS.0429” ,响应头中的status为429 ,错误信息提示:Your request has been controlled by overload sdk, please retry later。
  • 应用场景 单实例多并发适合函数处理逻辑中有较长时间等待下游服务响应的场景,也适合函数逻辑中初始化时间较长的场景,具备以下优势: 降低冷启动概率,优化函数处理时延:例如并发三个请求,不配置单实例多并发,FunctionGraph默认启动三个实例处理请求,会有三次冷启动。若配置了单实例支持三并发,三个并发请求,FunctionGraph只启动一个实例处理请求,减少了两次冷启动。 减少总请求处理时长,节省费用:单实例单并发下,多个请求的总处理时长为每个请求的处理时长相加。单实例多并发下,同一个实例对并发的多个请求的计费时间为,从第一个请求开始处理计时,到最后一个并发的请求处理结束记一次时长费用。
  • 网络限制 根据对网络的不同设置,函数有以下网络访问能力,您可按需设置。 网络配置 说明 允许函数访问公网 当前函数默认的公网NAT访问带宽在多个租户间共享,带宽小,仅适合小量调用的测试业务场景使用;如果对带宽、性能、可靠性有高要求的生产业务场景,需开启函数访问VPC,在VPC内添加公网NAT网关并绑定EIP,分配独占的外网访问带宽。 允许函数访问VPC内资源 开启“允许函数访问VPC内资源”时,函数将禁用默认网卡并使用VPC绑定的网卡,是否允许公网访问由配置的VPC决定,开关“允许函数访问公网”将不生效。 仅允许指定的VPC调用函数 开启“仅允许指定的VPC调用函数”时,将仅允许通过指定的VPC调用函数,并禁止通过公网调用函数。
  • 注意事项 物化视图的基表可以是行存表、列存表、hstore表、分区表或者指定某个分区、外表,不支持包含临时表(包括全局临时表、volatile临时表和普通临时表),不支持冷热表、不支持对自动分区表指定分区。 物化视图禁止INSERT/UPDATE/MERGE INTO/DELETE对数据进行修改。 物化视图执行一次将结果并保存,每次查询结果是一致的。BUILD IMMEDIATE或REFRESH后,物化视图可以查询出正确结果。 物化视图不能通过语法指定Node Group。支持物化视图的基表指定Node Group创建,物化视图会继承基表NodeGroup信息创建,需要多个基表的NodeGroup相同。 创建物化视图时需要schema的CREATE权限和基表或列的SELECT权限。 查询物化视图需要物化视图的SELECT权限。 刷新需要物化视图的INSERT和基表或列的SELECT权限。 物化视图支持ANALYZE/VACUUM/ALTER/DROP等细粒度权限。 物化视图支持with grant option的权限传递操作。 物化视图不支持更高级别的安全控制,如果基表存在行级访问控制、脱敏策略或owner为私有用户等限制SELECT权限的场景,则禁止创建物化视图;如果已存在物化视图,基表增加RLS、脱敏策略或修改owner为私有用户,则物化视图可以执行查询,但无法刷新。
  • 语法格式 1 2 3 4 5 6 7 CREATE MATERIALIZED VIEW [view_name] [ ( column_name [, ...] ) ] {{ BUILD { DEFERRED | IMMEDIATE }| { REFRESH { COMPLETE }{ ON DEMAND }|{ START WITH (timestmaptz) | EVERY (interval) }…}…| { ENABLE | DISABLE } QUERY REWRITE}| { WITH ( { storage_parameter = value } [, ... ] ) }| { DISTRIBUTE BY { HASH (column [ , ... ]) | ROUNDROBIN | REPLICATION }] AS query
  • 示例 创建基表,并向基表插入数据: 1 2 CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH(a); INSERT INTO t1 SELECT x,x FROM generate_series(1,10) x; 创建默认BUILD IMMEDIATE方式的物化视图: 1 CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM t1; 创建指定列存方式的物化视图: 1 CREATE MATERIALIZED VIEW mv2 WITH(orientation = column) AS SELECT * FROM t1; 创建手动按需刷新的物化视图: 1 CREATE MATERIALIZED VIEW mv3 BUILD DEFERRED REFRESH ON DEMAND AS SELECT * FROM t1; 创建指定刷新时间的物化视图: 1 CREATE MATERIALIZED VIEW mv4 BUILD DEFERRED REFRESH START WITH(trunc(sysdate)) EVERY (interval ‘1 day’) AS SELECT * FROM t1;
  • 参数说明 BUILD DEFERRED | IMMEDIATE IMMEDIATE表示创建物化视图时即包含最新数据。 DEFERRED表示创建物化视图时需要等到第一次refresh时才会包含数据。 REFRESH 指定物化视图的刷新方式。 创建物化视图后,物化视图中的数据只反映创建时刻基表的状态。当基表中的数据发生变化时,需要通过刷新物化视图(REFRESH MATERIALIZED VIEW)更新物化视图中的数据。 目前只支持COMPLETE全量刷新这一种刷新方式。执行物化视图定义的查询语句并更新物化视图。 刷新触发方式。 ON DEMAND:手动按需刷新。 START WITH (timestamptz) | EVERY (interval):定时刷新。START WITH指定首次刷新时间,EVERY 指定刷新间隔,根据指定的时间定时刷新。 ENABLE | DISABLE QUERY REWRITE 是否支持查询重写。默认不支持。 在指定ENABLE QUERY REWRITE时,需要设置GUC参数 mv_rewrite_rule才能启用物化视图查询重写功能。 查询重写是指在对基表进行查询时, 如果基表上创建有物化视图,数据库系统自动判断是否可以使用物化视图中的预计算结果处理查询。 如果可以使用某个物化视图,会直接从该物化视图读取预计算结果,起到加速查询的作用。 WITH ( { storage_parameter = value } [, ... ] ) ORIENTATION 指定表数据的存储方式,即行存方式、列存方式,该参数设置成功后就不再支持修改。 取值范围: ROW,表示表的数据将以行式存储。 行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 COLUMN,表示表的数据将以列式存储。 列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少。 默认值:由GUC参数default_orientation决定。 row表示创建行存表。 column表示创建列存表。 column enabledelta表示创建开启delta表的列存表。 物化视图不支持的存储类型:分区表、h-store表、外表、时序表。 enable_foreign_table_query_rewrite 指定是否允许包含外表的物化视图进行查询重写,需要与ENABLE QUERY REWRITE一起使用。 外表数据有变化,物化视图无法感知。如果需要对包含外表的物化视图使用查询重写功能,需要指定此选项。 取值范围: on,允许包含外表的物化视图进行查询重写。 off,不允许包含外表的物化视图进行查询重写。 默认值:off DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围: REPLICATION:表的每一行存在所有数据节点(DN)中,即每个数据节点都有完整的表数据。 ROUNDROBIN:表的每一行被轮番地发送给各个DN,因此数据会被均匀地分布在各个DN中。(ROUNDROBIN仅8.1.2及以上版本支持) HASH:对指定的列进行Hash,通过映射,把数据分布到指定DN。 默认值:由参数default_distribution_mode决定。 AS query 基于query的结果创建物化视图。
  • 示例 清理当前数据库中的所有表: 1 VACUUM; 仅回收表tpcds.web_returns_p1分区P2的空间,不更新统计信息: 1 VACUUM FULL tpcds.web_returns_p1 PARTITION(P2); 回收表tpcds.web_returns_p1空间,并更新统计信息: 1 VACUUM FULL ANALYZE tpcds.web_returns_p1; 清理当前数据库中的所有表并收集查询优化器的统计信息: 1 VACUUM ANALYZE; 仅清理特定表reason: 1 VACUUM (VERBOSE, ANALYZE) tpcds.reason; 对列存表table_delta进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta; 仅对列存表table_delta的分区p1进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta partition(p1);
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 FULL选项还可以带有COMPACT参数,该参数只针对HDFS表,指定该参数的VACUUM FULL操作性能要好于未指定该参数的VACUUM FULL操作。 COMPACT和PARTITION参数不能同时使用。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 PARTITION HDFS表不支持PARTITION参数,PARTITION参数不能和COMPACT同时使用。 PARTITION参数和COMPACT同时使用会报错:COMPACT can not be used with PARTITION. partition_name 要清理的表的分区名称。缺省时为所有分区。 DELTAMERGE 只针对HDFS表,将HDFS表的delta table中的数据转移到主表存储上。对HDFS表而言,当delta表中数据量小于六万行,则不作迁移,只有在大于或者等于六万行数据时,将delta表中所有数据迁移到HDFS上,并通过truncate清理delta表的存储空间。 HDFSDIRECTORY 只针对HDFS表,删除HDFS表在HDFS存储上表目录下的空值分区目录。
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的那个表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者,被授予了指定表VACUUM权限的用户或者被授予了gs_role_vacuum_any角色的用户,系统管理员默认拥有此权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 语法格式中含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 VACUUM列存表内部执行的操作包括三个:迁移delta表中的数据到主表、VACUUM主表的delta表、VACUUM主表的desc表。该操作不会回收delta表的存储空间,如果要回收delta表的冗余存储空间,需要对该列存表执行VACUUM DELTAMERGE。 VACUUM FULL系统表只能离线操作,在线VACUUM FULL系统表除了会锁表,还可能导致一些异常情况并产生报错。 如果有长查询访问系统表,此时执行VACUUM FULL,长查询可能会阻塞VACUUM FULL连接访问系统表,导致连接超时报错。 对列存分区表执行VACUUM FULL,会同时锁表和锁分区。 对不同的系统表执行VACUUM FULL并发操作可能会导致本地死锁。 VACUUM FULL操作分区表时与用户DML语句在如下特定场景有并发时可能发生分布式死锁,请谨慎操作: VACUUM FULL子分区与insert/update/delete主表。 VACUUM FULL全表与select全表/select子分区。 对表执行VACUUM FULL操作时会触发表重建(表重建过程中会先把数据转储到一个新的数据文件中,重建完成之后会删除原始文件),当表比较大时,重建会消耗较多的磁盘空间。当磁盘空间不足时,要谨慎对待大表VACUUM FULL操作,防止触发集群只读。
  • 语法格式 回收空间并更新统计信息,关键字顺序必须按语法显示的顺序给出。 1 2 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 仅回收空间,不更新统计信息。 1 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name ] [ PARTITION ( partition_name ) ]; 回收空间并更新统计信息,且对关键字顺序有要求。 1 2 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 针对HDFS表,将delta table中的数据转移到主表存储。(partition_name参数仅8.2.1.300及以上集群版本支持) 1 VACUUM DELTAMERGE [ table_name ][partition_name]; 针对HDFS表,删除HDFS表在HDFS存储上的空值分区目录。 1 VACUUM HDFSDIRECTORY [ table_name ];
  • 参数说明 ENABLE | DISABLE QUERY REWRITE 是否对本物化视图启动查询重写。 在启用启用物化视图的查询重写后需刷新物化视图,保证物化视图数据是最新的。 REFRESH [ COMPLETE ] [ ON DEMAND ] [ [ START WITH (timestamptz) ] | [EVERY (interval)] ] 修改物化视图的刷新方式。 OWNER TO new_owner 修改物化视图的owner。
  • 语法格式 ALTER MATERIALIZED VIEW [ IF EXISTS ] { materialized_view_name } [ ENABLE | DISABLE ] QUERY REWRITE; ALTER MATERIALIZED VIEW [ IF EXISTS ] { materialized_view_name } REFRESH [ COMPLETE ] [ ON DEMAND ] [ [ START WITH (timestamptz) ] | [ EVERY (interval) ] ]; ALTER MATERIALIZED VIEW { materialized_view_name } OWNER TO new_owner;
  • 示例 该示例是从GaussDB(DWS)数据源中读取数据,并写入到Print结果表中,其具体步骤参考如下: 在GaussDB(DWS)中创建相应的表,表名为dws_order,SQL语句参考如下: 1 2 3 4 5 6 7 8 9 10 create table public.dws_order( order_id VARCHAR, order_channel VARCHAR, order_time VARCHAR, pay_amount FLOAT8, real_pay FLOAT8, pay_time VARCHAR, user_id VARCHAR, user_name VARCHAR, area_id VARCHAR); 在GaussDB(DWS)中执行以下SQL语句,向dws_order表中插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 insert into public.dws_order (order_id, order_channel, order_time, pay_amount, real_pay, pay_time, user_id, user_name, area_id) values ('202103241000000001', 'webShop', '2021-03-24 10:00:00', '100.00', '100.00', '2021-03-24 10:02:03', '0001', 'Alice', '330106'), ('202103251202020001', 'miniAppShop', '2021-03-25 12:02:02', '60.00', '60.00', '2021-03-25 12:03:00', '0002', 'Bob', '330110'); 执行Flink SQL: 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 CREATE TABLE dwsSource ( order_id string, order_channel string, order_time string, pay_amount double, real_pay double, pay_time string, user_id string, user_name string, area_id string ) WITH ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://DWSIP:DWSPort/DWSdbName', 'tableName' = 'dws_order', 'username' = 'DWSUserName', 'password' = 'DWSPassword' ); CREATE TABLE printSink ( order_id string, order_channel string, order_time string, pay_amount double, real_pay double, pay_time string, user_id string, user_name string, area_id string ) WITH ( 'connector' = 'print' ); insert into printSink select * from dwsSource; 执行结果如下:
  • 参数说明 表1 数据库配置 参数 说明 默认值 connector flink框架区分connector参数,固定为dws。 - url 数据库连接地址。 - username 配置连接用户。 - password 配置密码。 - tableName 对应dws表。 - 表2 查询参数 参数 说明 默认值 fetchSize jdbc statement中fetchSize参数,用于控制查询数据库返回条数。 1000 enablePushDown 开启条件下推:开启后limit 和where条件会下推到数据库执行。 true
  • 语法格式 用DWS-Connector做源表时,DWS-Connector实现了SupportsLimitPushDown和SupportsFilterPushDown接口,支持将limit和where条件下推到数据库执行。 1 2 3 4 5 6 7 8 9 10 11 12 13 create table dwsSource ( attr_name attr_type (',' attr_name attr_type)* (','PRIMARY KEY (attr_name, ...) NOT ENFORCED) (',' watermark for rowtime_column_name as watermark-strategy_expression) ) with ( 'connector' = 'dws', 'url' = '', 'tableName' = '', 'username' = '', 'password' = '' );
  • 概述 dws-connector-flink是在dws-client的基础上对接Flink的一个工具,工具为对dws-client的包装,整体入库能力跟dws-client一致。dws-connector-flink为GaussDB(DWS)团队自研工具,后续将根据GaussDB(DWS)数据库持续优化。 dws-flink-connector的DWS-Connector只支持单并发查询存量数据,暂不支持并行读取。
  • 示例 该示例是从kafka数据源中读取数据,写入DWS结果表中,并指定攒批时间不超过10秒,每批数据最大30000条,其具体步骤如下: 在GaussDB(DWS)数据库中创建表public.dws_order: 1 2 3 4 5 6 7 8 9 10 11 create table public.dws_order( order_id VARCHAR, order_channel VARCHAR, order_time VARCHAR, pay_amount FLOAT8, real_pay FLOAT8, pay_time VARCHAR, user_id VARCHAR, user_name VARCHAR, area_id VARCHAR ); 消费Kafka中order_test topic中的数据作为数据源,public.dws_order作为结果表,Kafka数据为JSON格式,并且字段名称和数据库字段名称一一对应: 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 CREATE TABLE kafkaSource ( order_id string, order_channel string, order_time string, pay_amount double, real_pay double, pay_time string, user_id string, user_name string, area_id string ) WITH ( 'connector' = 'kafka', 'topic' = 'order_test', 'properties.bootstrap.servers' = 'KafkaAddress1:KafkaPort,KafkaAddress2:KafkaPort', 'properties.group.id' = 'GroupId', 'scan.startup.mode' = 'latest-offset', 'format' = 'json' ); CREATE TABLE dwsSink ( order_id string, order_channel string, order_time string, pay_amount double, real_pay double, pay_time string, user_id string, user_name string, area_id string ) WITH ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://DWSAddress:DWSPort/DWSdbName', 'tableName' = 'dws_order', 'username' = 'DWSUserName', 'password' = 'DWSPassword', 'autoFlushMaxInterval' = '10s', 'autoFlushBatchSize' = '30000' ); insert into dwsSink select * from kafkaSource; 给Kafka写入测试数据: 1 {"order_id":"202103241000000001", "order_channel":"webShop", "order_time":"2021-03-24 10:00:00", "pay_amount":"100.00", "real_pay":"100.00", "pay_time":"2021-03-24 10:02:03", "user_id":"0001", "user_name":"Alice", "area_id":"330106"} 等10秒后在GaussDB(DWS)表中查询结果: 1 select * from dws_order 结果如下:
  • Flink SQL配置参数 Flink SQL中设置的PRIMARY KEY将自动映射到dws-client中的uniqueKeys。参数跟随client版本发布,参数功能与client一致,以下参数说明表示为最新参数。 表1 数据库配置 参数 说明 默认值 connector flink框架区分connector参数,固定为dws。 - url 数据库连接地址。 - username 配置连接用户。 - password 配置密码。 - tableName 对应dws表。 - 表2 连接配置 参数 说明 默认值 connectionSize 初始dws-client时的并发数量。 1 connectionMaxUseTimeSeconds 连接创建多少秒后强制释放(单位:秒)。 3600(一小时) connectionMaxIdleMs 连接最大空闲时间,超过后将释放(单位:毫秒)。 60000(一分钟) 表3 写入参数 参数 说明 默认值 conflictStrategy 有主键表数据写入时主键冲突策略: ignore:保持原数据,忽略更新数据。 update:用新数据中非主键列更新原数据中对应列。 replace:用新数据替换原数据。 说明: update和replace在全字段upsert时等效,在部分字段upsert时,replace相当于将数据中不包含的列设置为null。 update writeMode 入库方式: auto:系统自动选择。 copy_merge:当存在主键时使用copy方式入临时表,从临时表merge至目标表;无主键时直接copy至目标表。 copy_upsert:当存在主键时使用copy方式入临时表,从临时表upsert至目标表;无主键时直接copy至目标表。 upsert: 有主键用upsert sql入库;无主键用insert into 入库。 UPDATE:使用update where 语法更新数据,若原表无主键可选择指定uniqueKeys,指定字段不要求必须时唯一索引,但非唯一索引可能会影响性能。 COPY_UPDATE:数据先通过copy方式入库到临时表,通过临时表加速使用update from where方式更新目标数据。 UPDATE_AUTO:批量小于copyWriteBatchSize使用UPDATE,否则使用COPY_UPDATE。 auto maxFlushRetryTimes 在入库时最大尝试次数,次数内执行成功则不抛出异常,每次重试间隔为 1秒 * 次数。 3 autoFlushBatchSize 自动刷库的批大小(攒批大小)。 5000 autoFlushMaxInterval 自动刷库的最大间隔时间(攒批时长)。 5s copyWriteBatchSize 在“writeMode == auto”下,使用copy的批大小。 5000 ignoreDelete 忽略flink任务中的delete。 false (1.0.10前默认true) ignoreNullWhenUpdate 是否忽略flink中字段值为null的更新, 只有在“conflictStrategy == update”时有效。 false metadataCacheSeconds 系统中对元数据的最大缓存时间,例如表定义信息(单位秒)。 180 copyMode copy入库格式: CSV:将数据拼接为CSV格式入库,该方式稳定,但性能略低。 DELIMITER:用分隔符将数据拼接,然后入库,该方式需要数据中不包含分隔符。 CSV createTempTableMode 创建临时表方式: AS LIKE AS numberAsEpochMsForDatetime 如果数据库为时间类型数据源为数字类型,是否将数据当成时间戳转换为对应时间类型。 false stringToDatetimeFormat 如果数据库为时间类型数据源为字符串类型,按该格式转换为时间类型,该参数配置即开启。 null sink.parallelism flink系统参数用于设置sink并发数量。 跟随上游算子 printDataPk 是否在connector接收到数据时打印数据主键,用于排查问题。 false ignoreUpdateBefore 忽略flink任务中的update_before,在大表局部更新时该参数一定打开,否则有update时会导致数据的其它列被设置为null,因为会先删除再写入数据。 true
  • 格式语法 SQL语法格式可能在不同Flink环境下有细微差异,具体以事件环境格式为准,with后面的参数名称及参数值以此文档为准。 1 2 3 4 5 6 7 8 9 10 11 12 create table dwsSink ( attr_name attr_type (',' attr_name attr_type)* (','PRIMARY KEY (attr_name, ...) NOT ENFORCED) ) with ( 'connector' = 'dws', 'url' = '', 'tableName' = '', 'username' = '', 'password' = '' );
共100000条