华为云用户手册

  • 概述 GaussDB (DWS)提供了使用 IAM 认证方式访问数据库的功能。当使用JDBC应用程序连接集群时,您可以在JDBC连接中配置IAM用户名及其用户凭证等信息,在连接数据库时系统就会自动生成临时数据库凭证,从而成功连接到数据库。 当前仅支持1.3.1及以上版本的集群及其配套的JDBC驱动程序使用IAM认证方式访问数据库。请先参考下载JDBC或ODBC驱动下载JDBC驱动程序。 IAM用户凭证有密码和访问密钥(Access Key ID和Secret Access Key,简称AK和SK)两种类型,您要为JDBC连接提供IAM访问密钥。 如需使用IAM用户凭证访问数据库,必须先给您的IAM用户授予DWS Database Access权限,同时拥有DWS Administrator和DWS Database Access权限的用户,才能基于IAM用户生成临时数据库用户凭证以连接GaussDB(DWS)数据库。 需要注意的是,DWS Database Access是用户组级别的权限,您可以通过为用户组授权并将用户加入到用户组的方式,使用户具有用户组中的权限。 在IAM中,只有admin用户组的用户可以管理用户。如需给IAM用户授权,您的IAM账号必须属于IAM的admin用户组,否则,请联系IAM账号管理员帮您授权。 使用IAM用户凭证访问数据库的流程如下: 授予IAM用户DWS Database Access权限 创建IAM用户凭证 配置JDBC连接使用IAM认证方式连接集群
  • 创建IAM用户凭证 用户可以登录管理控制台创建访问密钥,如果您已经创建过了,也可以使用已有的访问密钥。 登录管理控制台。 将鼠标移到右上角的用户名,单击“我的凭证”。 再单击“管理访问密钥”页签,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。 访问密钥是IAM身份认证的重要凭证,只有在新增访问密钥时,用户才可以下载到含有Access Key ID(AK)和Secret Access Key(SK)的密钥文件,在管理控制台只能查看到Access Key ID,如果您未曾下载过该密钥文件,请联系您的管理员进行获取,或者重新创建。 每个用户最多可创建2个访问密钥,有效期为永久。为了账号安全性,建议您定期更换并妥善保存访问密钥。
  • 注册并实名认证华为云账户 如果您还没有华为云账户,则必须先注册账号并开通华为云。如果您已有实名认证的账户,则可以跳过此步骤,并使用您已有的账户。 打开公有云服务网址http://www.huaweicloud.com/,单击页面右上方的“注册”,进入注册页面。 按照页面要求填写用户信息完成注册,请参见 注册华为账号 并开通华为云。 注册成功后即可自动登录华为云。 单击右上角用户名,进入基本信息页面,单击“实名认证”,进入实名认证页面。 按照页面提示完成实名认证。 开通云服务需要先进行实名认证。
  • IAM使用示例流程 图1 给用户授权GaussDB(DWS)权限流程 创建用户组并授权 使用华为云账号登录IAM控制台,创建用户组,并授予 数据仓库 服务的只读权限“DWS ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 用户登录并验证权限 使用新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择数据仓库服务,进入DWS主界面,单击右上角“创建数据仓库集群”,尝试创建数据仓库集群,如果无法创建(假设当前权限仅包含DWS ReadOnlyAccess),表示“DWS ReadOnlyAccess”已生效。 在“服务列表”中选择除数据仓库服务之外(假设当前策略仅包含DWS ReadOnlyAccess)的任一服务,若提示权限不足,表示“DWS ReadOnlyAccess”已生效。
  • 约束与限制 自定义登录限制: 新增数据源选择不同的集群,然后输入用户名和密码,测试连接后可以打开集群数据连接。 登录时最好勾选记住密码,如果不填数据库默认是gaussdb数据库。 自定义连接根据租户+用户做了用户权限隔离,不同的子用户看到的连接不同,每个用户只能看到自己创建的连接。 IAM用户登录限制: 需要IAM用户并且已授权DWS Database Access角色权限才能登录,否则编辑面板置灰,无法编辑。此时需联系有“DWS Administrator”权限的用户在当前页面完成对GaussDB(DWS)的委托授权。 IAM用户目前登录DWS集群数据库后没有任何权限,需要在用户管理界面对给IAM用户赋权才能操作。 连接超时限制: 后台设置了连接的超时时间,如果超时30分钟没有任何操作,则需要重新登录。 连接采用“用户登录ID+DATABASE”的方式做唯一缓存,保证每个用户连接每个数据库使用一个连接,保证每次操作在一个连接上进行执行。 针对一个数据源下的同一个数据库,不建议开多个窗口执行SQL命令,因为同一个数据库下建立的是同一个连接,开多个窗口也需等待前面SQL执行完后才会继续执行。
  • 告警解释 GaussDB(DWS)通过资源池实现对内存、IO和CPU等资源的控制,并基于优先级调度机制实现资源管理和分配,对用户业务提供资源负载管理服务。某种资源紧张时,可能出现SQL语句阻塞排队,等待其他语句执行完毕后才能执行的现象,详情请参见动态负载管理下的CCN排队。 GaussDB(DWS)固定每5分钟检查默认资源池default_pool的队列阻塞情况。如果存在长时间阻塞无法执行的SQL语句(默认20分钟,可配置),则触发集群默认资源池队列阻塞告警;当集群不存在符合告警条件的SQL语句时,自动消除该告警。 如果一直存在能够引发告警的阻塞SQL,那么在24小时(可配置)后将再次发起告警。
  • 智能运维概览 GaussDB(DWS)提供智能运维功能,帮助用户快速高效地执行运维任务。智能运维会根据集群负载情况,选择合理时间窗、并发度完成用户指定的任务。在运维任务执行过程中,智能运维会时刻关注用户业务的变化,及时调整运维任务执行策略,以减轻对用户业务的影响。智能运维支持周期型和单次型任务的创建,执行时间窗可按照不同用户业务负载定制化。 智能运维具备一定的高可用性,在集群异常的情况下,智能运维将重新执行失败的运维任务,若由于集群异常导致运维任务部分步骤无法完成,智能运维将尝试跳过失败的步骤,以节省用户运维时间窗开销。 智能运维界面主要由以下部分构成: 运维任务公共配置: 用户表VacuumFull运维任务最大并发数:配置应用于每个用户表VacuumFull运维任务,建议依据剩余磁盘空间和时间窗内IO负载情况合理配置。配置范围为1~24,建议配置值为5。 小CU阈值:根据小CU阈值来判定是不是小CU表,小于阈值为小CU表,小于等于该值为触发Vacuum的条件,越大触发越敏感,默认推荐值为1000。 小CU占比:小CU表占全部CU比率,大于等于该值为触发Vacuum的条件,越小触发越敏感,默认推荐值为50%。 进行中的运维任务:显示正在运行的运维任务信息(目前仅支持Vacuum运维任务,用户数据膨胀,磁盘内存不足可进行Vacuum操作,详情请参见数据膨胀磁盘空间不足,导致性能降低)。 用户频繁创建、删除表,导致系统表膨胀严重,可对系统表执行Vacuum。 用户频繁执行UPDATE、DELETE语句,导致用户表膨胀严重,可对用户表执行Vacuum/Vacuum Full。 运维详情:运维详情包括两部分,运维计划和运维状态。运维计划将展示全部运维任务基本信息,运维状态将展示运维任务运行状态信息。 该特性仅8.1.3及以上版本支持。其中小CU阈值、小CU占比仅9.1.0.200及以上集群版本支持,如果版本不符合将不展示该字段。 智能运维功能暂不支持存算一体(单机部署)。 VacuumFull运维任务完成后系统会自动进行Analyze操作,用户无需手动。 运维任务公共配置模块仅8.1.3及以上集群版本支持,历史版本需要联系技术支持人员升级使用。 父主题: Vacuum回收GaussDB(DWS)空间
  • 策略语法 给用户组选择策略时,单击策略下方的,可以查看策略的详细内容,以“DWS Administrator”为例,说明RBAC策略的语法。 图2 RBAC策略语法 { "Version": "1.0", "Statement": [ { "Effect": "Allow", "Action": [ "dws:dws:*" ] } ], "Depends": [ { "catalog": "BASE", "display_name": "Server Administrator" }, { "catalog": "BASE", "display_name": "Tenant Guest" } ] } 表1 RBAC策略语法 参数 含义 值 Version 策略的版本。 固定为“1.0”。 Statement Action 定义对GaussDB(DWS) 的具体操作。 格式为:服务名:资源类型:操作 "dws:dws:*",表示对GaussDB(DWS) 的所有操作,其中dws为服务名称;“*”为通配符,表示对所有GaussDB(DWS) 的资源类型可以执行所有操作。 Effect 定义Action中所包含的具体操作是否允许执行。 Allow:允许执行。 Deny:不允许执行。 Depends catalog 依赖的其他策略的所属目录。 服务名称 例如:BASE display_name 依赖的其他权限的名称。 权限名称 例如:Server Administrator 在使用RBAC鉴权时要注意Depends参数,使用时要把依赖的其他权限同时授予。 例如DWS Administrator权限使用时依赖Server Administrator以及Tenant Guest,在给用户授权时要同时把依赖的两个权限授予用户。
  • 包年/包月计费模式 表5 包年/包月计费模式显示说明 状态 说明 XX后到期 包周期集群剩余时长。可进行续费、转按需、退订操作。 已过期, XX后冻结 包周期集群购买时长到期,未续费时会进入宽限期。宽限期包周期集群正常使用,可进行续费操作,不可进行转按需、退订操作。 已冻结, XX后删除 包周期集群宽限期结束,进入保留期。可进行续费操作,不可进行转按需、退订操作。 XX后转按需 包周期集群购买时长到期后转成按需集群。可进行续费、退订操作,不可进行转按需操作。 已冻结(违规) 公安冻结资源。可进行续费操作,不可进行转按需、退订操作。冻结期间会继续收取费用。 已冻结(违规), XX后删除 违规冻结资源。可进行续费操作,不可进行转按需、退订操作。冻结期间会继续收取费用。
  • 集群任务信息 表4 任务信息说明 状态 说明 创建快照中 表示集群正在执行创建快照的操作。 创建快照失败 表示集群执行快照创建操作失败。 观察中 表示集群在用户自助升级操作后待提交阶段。 配置中 表示系统正在保存集群参数的修改。 重启中 表示集群正在重启过程中。 重启失败 表示集群重启操作失败。 转加密集群中 表示集群正在转加密集群过程中。 转加密集群失败 表示集群转加密失败。 节点扩容 表示集群正在扩容中。 扩容失败 表示集群扩容失败。 磁盘扩容中 表示集群正在磁盘扩容中。 磁盘扩容失败 表示集群磁盘扩容失败。 弹性负载均衡绑定中 表示集群正在绑定弹性负载均衡。 弹性负载均衡绑定失败 表示集群绑定弹性负载均衡失败。 弹性负载均衡解绑中 表示集群正在解绑弹性负载均衡。 弹性负载均衡解绑失败 表示集群解绑弹性负载均衡失败。 缩容检测中 表示集群正在检测是否满足缩容条件。 缩容检测失败 表示集群目前的状态不满足缩容: 集群default_storage_nodegroup参数值不为installation。 集群数据库下data_redis为预留重分布schema,该schema中存在用户表。 用户集群磁盘空间不满足缩容条件,详情请参见集群缩容。 缩容中 表示集群正在缩容中。 缩容失败 表示集群缩容失败,需要用户尽快手动重新执行缩容,否则会影响业务。 主备恢复中 表示集群正在主备恢复中。 主备恢复失败 表示集群主备恢复失败,失败原因有以下几种情况,详情请参见管控面错误码参考: 正在执行DN REDO,请稍后重试, 等待redo做完之后重试主备恢复。 查询DN REDO失败,请查看租户侧 日志分析 失败原因。 存在主备追赶,请稍后重试,等待主备追赶做完之后重试主备恢复。 查询主备追赶失败,请查看租户侧日志分析失败原因。 主备恢复失败,请联系技术支持人员或稍后重试。请查看租户侧日志分析失败原因。 集群状态异常,无法进行主备恢复操作,请检查集群状态是否是normal状态。 弹性变更规格中 表示集群正在弹性变更集群规格中。 弹性变更规格失败 表示集群弹性规格变更失败。 订单待支付 表示按需集群转包周期集群订单未支付,完成订单支付或取消订单该状态消失。 经典变更规格 表示集群正在进行经典变更规格中。 经典变更规格失败 表示经典变更规格失败,其中配额、用户权限以及集群状态都有可能导致失败。 维护中 表示集群正在进行维护变更操作,如集群升级、插件升级等。 维护失败 表示集群升级操作失败。 停止中 表示集群正在停止中。 启动中 表示集群正在启动中。 巡检中 表示集群正在做变更前的巡检。 巡检失败 表示集群巡检操作失败。
  • 集群状态 表2 集群状态说明 状态 说明 可用 表示集群工作正常。 只读 集群存储容量使用率或单节点磁盘使用率大于90%时会进入此状态,该状态下集群仍可工作但只能支持查询操作,不支持任何写操作。当集群进入只读状态时,可通过解除只读功能进行解除,如解除失败请联系技术支持人员解除只读状态。 解除集群只读状态后,建议您参考以下措施进行处理: 使用SQL客户端工具,以管理员用户连接数据库,执行以下命令定期清理和回收存储空间。 1 VACUUM FULL; GaussDB(DWS)数据仓库中保存的数据在删除后,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费,建议定期清理存储空间。 建议用户检查磁盘容量,分析现有集群规格是否满足业务需求,若不满足,建议您对集群进行扩容,具体操作请参见集群扩容。 非均衡 如果集群中存在gtm或dn的角色和初始角色不一致,就认为处于非均衡状态。 非均衡状态下会出现某些节点主实例增多,从而负载压力较大。这种情况下集群状态是正常的,但整体性能要不如均衡状态。建议业务低峰期,切换为可用状态,详情操作请参见集群主备恢复。 重分布中 集群扩容时新节点添加完成后,原节点存储的业务数据明显多于新节点,此时系统自动在所有节点重新分布保存数据。该状态下集群仍可工作。 重分布失败 调整数据分布情况失败,但没有数据丢失。该状态下集群仍可工作。建议用户联系技术支持人员进行处理。 节点故障 表示集群中个别节点出现问题无法正常工作,但整个集群正常。建议用户联系技术支持人员进行处理。 不可用 表示集群无法提供数据库服务。建议用户联系技术支持人员进行处理。 创建中 表示集群正在创建中。 创建失败 表示集群创建失败。 创建中,恢复中 表示集群正在创建中,且该集群是快照恢复而创建的集群,此时集群正在恢复中。当对快照执行了恢复操作时,会恢复快照到新集群,此时该新集群会进入此状态。 删除中 表示集群正在删除中。 公安冻结 表示集群被公安冻结,公安冻结情况下不允许删除或退订集群,且不支持修改集群名称。 已冻结 表示集群被冻结(除公安冻结之外的冻结场景),不支持修改集群名称。 当您的账户余额不足导致系统扣费失败时,您的服务资源将会进入保留期,保留期内服务资源将被冻结而无法使用,但资源和数据会为您保留。当集群状态为“已冻结”时,您需要给账户充值以确保账户余额不为0才能解冻,详细操作请参见如何续费?。 待重启 表示集群修改过GUC参数,需重启才能生效。若并未重启集群,此时部分运维操作会被限制。在用户手动重启集群后,GUC参数生效,集群状态将恢复为“可用”。 已停止 表示集群已停止。
  • 标签简介 标签(Tag)是用户自定义的、用于标识云资源的键值对,它可以帮助用户对云资源进行分类和搜索。 标签由标签“键”和标签“值”组成。 一个标签“键”可以拥有多个标签“值”。 一个云资源不能拥有重复的标签“键”。 在GaussDB(DWS)中,当用户创建集群后,如果想对集群添加如项目名称、业务类别、背景信息等相关信息的标识,用户可以通过添加标签来实现。如果用户在其他云服务中使用了标签,那么建议用户为同一个业务所使用的云资源创建相同的标签键值对以保持一致性。 GaussDB(DWS)支持以下标签: 资源标签 在GaussDB(DWS)中创建的非全局的标签。 预定义标签 在标签管理服务(简称TMS)中创建的预定义标签,属于全局标签。 有关预定义标签的更多信息,请参见《标签管理服务用户指南》。 在GaussDB(DWS)中,支持对以下资源添加标签: 集群 支持在创建集群时或在集群创建成功后,对集群添加标签。并且,在集群列表中,可通过标签进行搜索。 每个集群最多可以添加 20 个标签。 当用户对某一集群添加了标签,并对该集群创建快照,使用快照恢复集群时,该集群的标签不会恢复,需要用户重新添加标签。 当删除集群时,也会删除与集群关联的非预定义标签,而预定义标签则需要前往标签管理服务进行删除。 父主题: 管理GaussDB(DWS)标签
  • 支持审计的关键操作列表 通过 云审计 服务,您可以记录与GaussDB(DWS)服务相关的操作事件,便于日后的查询、审计和回溯。 自动快照的创建、删除走系统内部调度,非用户操作,不记录审计日志。 因GaussDB(DWS)集群操作事件较多,下表仅展示部分高频支持审计的GaussDB(DWS)操作。 表1 云审计服务支持审计的GaussDB(DWS)操作列表 操作名称 资源类型 事件名称 创建集群 cluster createCluster 删除集群 cluster deleteCluster 集群巡检 cluster createInspection 终止巡检 cluster AbortInspection 扩容集群 cluster growCluster 空闲节点扩容 cluster resizeWithFreeNodes 集群重分布 cluster redistributeCluster 查询重分布详情 cluster queryRedisInfo 磁盘扩容 cluster executeDiskExpand 集群规格变更 cluster flavorResize 重启集群 cluster rebootCluster 集群主备切换 cluster activeStandySwitchover 重置密码 cluster resetPassword 集群修复 cluster repairCluster 创建集群连接信息 cluster createClusterConnection 修改集群连接信息 cluster modifyClusterConnection 删除集群连接信息 cluster deleteClusterConnection 调整集群大小 cluster resizeCluster 绑定或解绑弹性IP cluster bindOrUnbindEIP 创建或绑定Elb cluster createOrBindElb 解绑Elb cluster unbindElb 添加CN cluster addCN 删除CN cluster deleteCN 集群升级 cluster clusterUpdateMgr 集群缩容 cluster shrinkCluster 添加资源管理计划 cluster addWorkloadPlan 删除资源池 cluster deleteWorkloadQueueInfo 添加资源池 cluster addWorkloadQueueInfo 修改集群guc参数 cluster updateClusterConfigurations 解除只读 cluster cancelReadonly 修改运维时间窗 cluster modifyMaintenanceWindow 批量增加CN节点 cluster batchCreateCn 批量删除CN节点 cluster batchDeleteCn 批量添加标签 cluster batchCreateResourceTag 批量删除标签 cluster batchDeleteResourceTag 创建逻辑集群 cluster createLogicalCluster 删除逻辑集群 cluster deleteLogicalCluster 编辑逻辑集群 cluster editLogicalCluster 重启逻辑集群 cluster restartLogicalCluster 转换到逻辑集群 cluster switchLogicalCluster 启动集群 cluster startCluster 停止集群 cluster stopCluster 修改集群安全组 cluster changeSecurityGroup 修改集群时区 cluster modifyClusterTimezone 创建快照 backup createBackup 删除快照 backup deleteBackup 恢复集群 backup restoreCluster 复制快照 backup copySnapshot 删除快照策略 backup deleteBackupPolicy 更新快照策略 backup updateClustersBackupPolicy 创建容灾 disasterRecovery createDisasterRecovery 删除容灾 disasterRecovery deleteDisasterRecovery 启动容灾 disasterRecovery startDisasterRecoveryAction 停止容灾 disasterRecovery stopDisasterRecoveryAction 灾备切换 disasterRecovery switchoverDisasterRecoveryAction 异常切换 disasterRecovery failoverDisasterRecoveryAction 恢复容灾 disasterRecovery recoveryDisaster 更新容灾配置 disasterRecovery updateRecoveryDisaster 查询容灾详情 disasterRecovery disasterRecoveryOperate 设置安全参数 configurations updateConfigurations 创建扩展资源 dataSource createExtDataSource 删除扩展资源 dataSource deleteExtDataSource 更新扩展资源 dataSource updateExtDataSource 创建 MRS 数据源 dataSource createExtDataSource 删除MRS数据源 dataSource deleteExtDataSource 更新MRS数据源 dataSource updateExtDataSource
  • 添加资源管理计划阶段 登录GaussDB(DWS)管理控制台。 在集群列表中单击需要访问“资源管理”页面的集群名称。 进入“集群详情”页面,左导航栏单击“资源管理”。 切换至“资源管理计划”页签,单击计划阶段区域的“添加”按钮,在添加阶段页面填写阶段名称并配置资源信息,确认成功后单击“确定”按钮。 添加阶段时必须停止正在运行的资源管理计划,否则无法添加。 每个计划最多支持添加48个阶段。 一个计划中所有阶段的切换时间不能相同。 时间、日期、月份共同组成执行时间表达式,不允许配置不存在的日期表达式,例如2.30。
  • 前提条件 已创建GDS-kafka集群。 GDS-kafka集群与目标数据源可以正常通信。 如果目标数据源为云下的数据库,则需要通过公网或者专线打通网络。通过公网互通时,需确保GDS-kafka集群已绑定EIP、云上安全组出方向放通云下数据源所在的主机、数据源所在的主机可以访问公网且防火墙规则已开放连接端口。 如果目标数据源为云上服务,则网络互通需满足如下条件: GDS-kafka集群与云上服务处于不同区域的情况下,需要通过公网或者专线打通网络。通过公网互通时,需确保GDS-kafka集群已绑定EIP,数据源所在的主机可以访问公网且防火墙规则已开放连接端口。 GDS-kafka集群与云上服务同区域情况下,同虚拟私有云、同子网、同安全组的不同实例默认网络互通;如果同虚拟私有云但是子网或安全组不同,还需配置路由规则及安全组规则,配置路由规则请参见如何配置路由规则章节,配置安全组规则请参见如何配置安全组规则章节。 必须确保该云服务的实例与集群所属的企业项目必须一致,如果不同,需要修改工作空间的企业项目。 已获取待连接数据源的地址、用户名和密码,且该用户拥有数据导入、导出的操作权限。
  • 创建逻辑集群关联用户并跨逻辑集群查询数据 以系统管理员dbadmin连接数据库,执行以下SQL语句查看逻辑集群创建成功。 1 SELECT group_name FROM PGXC_GROUP; 创建两个用户u1和u2,分别关联逻辑集群lc1和逻辑集群lc2。 1 2 CREATE USER u1 NODE GROUP "lc1" password '{password}'; CREATE USER u2 NODE GROUP "lc2" password '{password}'; 切换到用户u1,创建表t1,并插入数据。 1 2 3 SET ROLE u1 PASSWORD '{password}'; CREATE TABLE u1.t1 (id int); INSERT INTO u1.t1 VALUES (1),(2); 切换到用户u2,创建表t2,并插入数据。 1 2 3 SET ROLE u2 PASSWORD '{password}'; CREATE TABLE u2.t2 (id int); INSERT INTO u2.t2 VALUES (1),(2); 同时使用u2查询u1.t1表。返回结果提示没有权限。 1 SELECT * FROM u1.t1; 切换回系统管理员dbadmin,查询表u1.t1和u2.t2分别创建到了集群lc1和lc2中,分别对应企业的两块业务,实现了基于逻辑集群的数据隔离。 1 2 3 SET ROLE dbadmin PASSWORD '{password}'; SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't1'; SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't2'; 将逻辑集群lc1的访问权限授予用户u2,同时将SCHEMA u1访问权限、表u1.t1访问权限授予用户u2。 1 2 3 GRANT usage ON NODE GROUP lc1 TO u2; GRANT usage ON SCHEMA u1 TO u2; GRANT select ON TABLE u1.t1 TO u2; 划分逻辑集群后,相当于在原来物理集群的基础上,再增加一层逻辑集群(NODE GROUP)的权限隔离。所以跨逻辑集群访问数据,首先要授权用户有逻辑集群(NODE GROUP层)权限,其次是SCHEMA权限,最后是单张表TABLE权限。如果没有授予逻辑集群的权限,会提示类似permission denied for node group xx的错误信息。 再次切换到u2用户,查询u1.t1表,查询成功,逻辑集群既实现了数据隔离,又可以在用户授权后进行跨逻辑集群访问。 1 2 SET ROLE u2 PASSWORD '{password}'; SELECT * FROM u1.t1;
  • 背景信息 智能表优化包含分布列推荐和排序键推荐两个功能。分布列推荐(Distribution Key Recommendation,DKR)能够为已创建的数据表推荐较优的分布列,有效缓解数据倾斜问题,提升连接查询的性能。排序键推荐(Partial Cluster Key Recommendation, SKR)能够为已创建的数据表推荐较优的排序键,优化数据表layout方式,提升扫描性能。 如果当前控制台界面不支持该功能,请联系技术支持人员。
  • 响应示例 状态码:200 OK { "result" : { "total" : 1, "value" : [ { "testcase_uri" : "sdsadasz1221", "testcase_number" : "sdsadasz1221" } ], "page_size" : 10, "page_no" : 1 } }
  • 响应参数 状态码:200 表4 响应Body参数 参数 参数类型 描述 status String success|error result ResultValueListTestcasePlanVo object 请求的返回的数据对象 error ApiError object 失败时的error信息 request_id String 由接口调用方传入,建议使用UUID保证请求的唯一性。 server_address String 本次请求的受理的服务地址 表5 ResultValueListTestcasePlanVo 参数 参数类型 描述 total Integer 起始记录数 大于 实际总条数时, 值为0, 分页请求才有此值 value Array of TestcasePlanVo objects 实际的数据类型:单个对象,集合 或 NULL reason String 业务失败的提示内容 page_size Integer 分页大小 page_no Integer 分页编码 has_more Boolean 是否有更多 表6 TestcasePlanVo 参数 参数类型 描述 testcase_uri String 测试用例URI testcase_number String 测试用例用例编号 plans Array of TestPlanVo objects 测试计划信息 表7 TestPlanVo 参数 参数类型 描述 uri String 测试计划URI name String 测试计划名称 表8 ApiError 参数 参数类型 描述 code String 参数解释: 业务失败的错误码 取值范围: 不涉及 reason String 参数解释: 业务失败的提示内容 取值范围: 不涉及 状态码:400 Bad Resuest 状态码:401 Unauthorized 状态码:404 Not Found 状态码:500 Internal Server Error
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 case_uri_list 否 Array of strings 测试用例URI列表(测试用例URI和编号填其中一个即可) case_number_list 否 Array of strings 测试用例编号列表(测试用例URI和编号填其中一个即可
  • 常见问题 Q:writeMode参数设置什么值比较合适? A:根据业务场景分update(只更新存在的数据)和upsert(对于同一主键数据如果存在就更新,不存在就新增一条数据)两个类型,推荐直接使用auto方式即可,该方式下会根据数据量的大小自动选择,如果数据量较大会增大攒批参数autoFlushBatchSize,即可提升入库性能。 Q:autoFlushBatchSize和autoFlushMaxInterval怎么设置比较合适? A:autoFlushBatchSize参数用于设置最大攒批条数,autoFlushMaxInterval参数用于设置最大攒批间隔,两个参数分别从时间和空间维度管控攒批。 通过autoFlushMaxInterval可保证数据量较小时的时效性,如对时效性无强制要求通常不建议设置的太小,建议不低于3s走默认值即可。 通过autoFlushBatchSize可控制一批数据的最大条数,一般来说攒批量越大,对于整体入库性能会更好,对性能来说通常该参数的设置推荐越大越好,参数的设置根据业务数据的大小以及flink运行内存来设置,保证不内存溢出。 对于大多业务来说无需设置autoFlushMaxInterval,将autoFlushBatchSize设置为50000即可。 Q: 遇到数据库死锁了怎么办? A:通常出现死锁大致分为行锁死锁和分布式死锁。 行锁:该场景通常为同一主键数据的并发更新造成行锁,该情况可以通过对数据做key by解决,key by必须根据数据库主键做,保证同一个主键数据会在同一个并发中,破坏掉并发更新的条件,无法造成死锁。Flink SQL做key by需要Flink本身支持,对于 DLI /MRS均能实现,如MRS flink通过增加参数“key-by-before-sink=true”可实现key by。具体怎么使用以实现方为准,对于无法使用的建议使用API方式入库。 分布式死锁:该场景通常为列存表的并发更新造成分布式死锁,暂无法解决,建议使用行存或者hstore。
  • 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(一分钟) dws client参数全量支持在flink sql通过key方式配置,下表参数为兼容1.x版本参数,当同时配置2.x和1.x参数时生效2.x版本参数值: 表3 DWS client写入参数 参数 说明 默认值 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 metadataCacheSeconds 系统中对元数据的最大缓存时间,例如表定义信息(单位秒)。 180 copyMode copy入库格式: CS V:将数据拼接为CSV格式入库,该方式稳定,但性能略低。 DELIMITER:用分隔符将数据拼接,然后入库,该方式需要数据中不包含分隔符。 CSV createTempTableMode 创建临时表方式: AS LIKE AS numberAsEpochMsForDatetime 如果数据库为时间类型数据源为数字类型,是否将数据当成时间戳转换为对应时间类型。 false stringToDatetimeFormat 如果数据库为时间类型数据源为字符串类型,按该格式转换为时间类型,该参数配置即开启。 null 表4 connector参数 参数 说明 默认值 ignoreDelete 忽略flink任务中的delete。 false (1.0.10前默认true) ignoreNullWhenUpdate 是否忽略flink中字段值为null的更新,只有在“conflictStrategy == update”时有效。 false sink.parallelism flink系统参数用于设置sink并发数量。 跟随上游算子 printDataPk 是否在connector接收到数据时打印数据主键,用于排查问题。 false ignoreUpdateBefore 忽略flink任务中的update_before,在大表局部更新时该参数一定打开,否则有update时会导致数据的其它列被设置为null,因为会先删除再写入数据。 true
  • UDF函数DnHashFunction参数说明 参数格式 dn_hash('dws表名',sink并行度,最大并行度,dws作为分布列的数据在源数据的字段名称{1,}) 参数说明 使用时上游并行度必须不多于sink并行度,DnHashFunction同样是通过进程内获取sink 算子初始化的dws client实例获取到的表元数据,如果当前进程无sink算子就会导致无法获取client实例。 使用后会增加一个hash算子,如果链路有多个算子处理业务,当执行hash算子后不可以再有改变数据分区的算子,否则数据会被再次分区就不能到达指定sink算子。 最大并行度默认flink自动调整的,算法中需要使用,因此自动调整的无法使用,必须通过参数设置固定并把设置额值作为UDF的参数,可以通过参数pipeline.max-parallelism设置或者jar方式通过API设置: StreamExecutionEnvironment evn = StreamExecutionEnvironment.getExecutionEnvironment(); evn.setParallelism(1); evn.setMaxParallelism(1024); 如果分布列包含多个字段,分布列的字段顺序需要保持和DWS一致,分布列支持的字段类型和dws client一致参考参数WRITE_PARTITION_POLICY,使用功能同样需要额外配置,不可自行使用。
  • 使用flink SQL直连DN入库 该能力依赖flink sql DISTRIBUTEBY能力,mrs有提供此能力,具体请参见Flink SQL语法增强。 connector提供udf函数可根据分布列值计算出下游并发结合flink sql DISTRIBUTEBY能力实现将数据按DN分区能力,示例: 需要在SQL中引入UDF。 CREATE temporary FUNCTION dn_hash AS 'com.huaweicloud.dws.connectors.flink.partition.DnHashFunction'; 正常写Source SQL。 CREATE TABLE users ( id BIGINT, name STRING, age INT, text STRING, created_at TIMESTAMP(3), updated_at TIMESTAMP(3) ) WITH ( 'connector' = 'datagen', 'fields.id.kind' = 'sequence', 'fields.id.start' = '1', 'fields.id.end' = '1000', 'fields.name.length' = '10', 'fields.age.min' = '18', 'fields.age.max' = '60', 'fields.text.length' = '5' ) Sink表定义SQL中需要新增一个字段并且要求int类型值用于接收UDF计算的结果,示例中叫dn_hash。 create table dws_users ( dn_hash int, id BIGINT, name STRING, age INT, text STRING, created_at TIMESTAMP(3), updated_at TIMESTAMP(3), PRIMARY KEY (id) NOT ENFORCED ) WITH ( 'connector' = 'dws', 'url' = '%s', 'tableName' = 'test.users', 'username' = '%s', 'autoFlushBatchSize' = '50000', 'password' = '%s' ) Insert into sql使用 udf获取数据下游算子信息,同时使用DISTRIBUTEBY对返回结果做数据分区,数据就会按照udf返回信息到下游指定并行度。 insert into dws_users select /*+ DISTRIBUTEBY('dn_hash') */ dn_hash('test.users',10,1024, id) as dn_hash, * from users
  • 示例 该示例是从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 结果如下:
  • 格式语法 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' = '' );
  • 问题现象 异常信息如下: 1 [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/xxx/slavespace/slave3/workspace/job_4a1d5be4-b273-4ac8-8d5d-2ee583e71832_1544498089095). Please verify you invoked Maven from the correct directory.
  • 问题现象 执行过构建任务日志报错信息如下: Caused by: org.gradle.internal.resource.transport.http.HttpErrorStatusCodeException: Could not GET 'https://jcenter.bintray.com/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.pom'. Received status code 504 from server: Gateway Time-out
  • 常用操作:SQL作业参数设置 确保kyuubi的/conf/kyuubi-defaults.conf配置打开如下参数开关。 kyuubi.engine.dli.set.conf.transform.to.annotation=true 在sql语句的末尾添加注解参数。 set 参数 示例: set dli.sql.current.database=tpch set dli.sql.shuffle.partitions=10 在DLI的SQL编辑器的执行效果:Set参数会修改为注释提交到DLI侧执行。 图4 在DLI的SQL编辑器查看配置的参数
  • 步骤1:安装并配置Kyuubi连接DLI 如需使用外网访问Kyuubi请确保弹性云服务器绑定弹性公网IP,并配置安全组入方向开启10009和3309端口。 安装JDK。 在安装和使用Kyuubi前,确保您的开发环境已安装JDK。 Java SDK要求使用JDK1.8或更高版本。考虑到后续版本的兼容性,推荐使用1.8版本。 下载JDK。 从Oracle官网下载并安装JDK1.8版本安装包。 本例使用jdk-8u261-linux-x64.tar.gz。 将jdk上传到linux服务器对应的目录下并执行解压命令,此处上传到/usr/local目录下。 sudo tar -xzf jdk-8u261-linux-x64.tar.gz -C /usr/local/ 配置环境变量。 编辑.bashrc或.profile文件,添加以下行: export JAVA_HOME=/usr/local/jdk-1.8.0_261 export PATH=$PATH:$JAVA_HOME/bin 执行以下命令应用环境变量。 source ~/.bashrc 执行命令java -version,检查是否安装成功,如下显示版本号信息说明java环境安装成功。 java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode) 安装Kyuubi 访问Apache Kyuubi的下载Kyuubi安装包。了解更多Kyuubi安装操作。 解压下载的Kyuubi安装包。 tar -xzf kyuubi-{version}-bin.tar.gz 配置环境变量(可选): 将Kyuubi的bin目录添加到PATH环境变量中,确保可以在任何位置调用Kyuubi的脚本。 配置Kyuubi连接DLI 在Kyuubi的根目录下添加DLI驱动。 在“DLI SDK DOWNLOAD”页面,单击Kyuubi驱动包链接,下载对应版本的驱动包。 并将该驱动放在kyuubi根目录/externals/engines/jdbc。 确保插件用户组和权限与其他Jar保持一致。 执行以下命令修改Kyuubi配置文件。 cd $KYUUBI_HOME/confvi kyuubi-defaults.conf 配置项说明请参考表1。 表1 kyuubi配置参数说明 配置项 说明 是否必选 示例 kyuubi.engine.type JDBC服务类型。这里请指定为dli。 是 jdbc kyuubi.engine.jdbc.type 引擎类型。请使用dli。 是 dli kyuubi.engine.jdbc.driver.class 连接JDBC服务使用的驱动类名。请使用com.huawei.dli.jdbc.DliDriver 是 com.huawei.dli.jdbc.DliDriver kyuubi.engine.jdbc.connection.url JDBC服务连接的URL。 格式:jdbc:dli://{dliendpoint} /{projectId} 是 jdbc:dli://{dliendpoint} /{projectId} kyuubi.engine.jdbc.session.initialize.sql 用于指定在建立JDBC会话时执行的初始化SQL语句。 否 select 1 如果在DLI的管理控制台看到select 1,代表初始化成功。 kyuubi.frontend.protocols 用于指定Kyuubi服务支持的前端协议。Kyuubi支持多种前端协议,允许用户通过不同的接口与Kyuubi进行交互。 是 mysql thrift_binary kyuubi.engine.dli.schema.show.name 用于指定当用户执行show schemas或show databases语句时,Kyuubi引擎如何展示数据源接口的模式名称。 true:表示在展示模式名称时,包含 DLI 的名称作为前缀。 false:表示在展示模式名称时,不包含 DLI 的名称。 例如如果配置为true,并且有一个DLI名称为 hive,那么在执行show schemas时,输出为hive.default的格式。 如果配置为false,输出为default的格式。 否 true false kyuubi.engine.dli.jdbc.connection.region DLI的区 域名 称和服务名称。 是 regionname=ap-southeast-2 kyuubi.engine.dli.jdbc.connection.queue DLI服务的队列名称。 是 dli_test kyuubi.engine.dli.jdbc.connection.database 用于指定Kyuubi引擎通过JDBC连接到DLI数据源时默认使用的数据库名称。 是 tpch kyuubi.engine.dli.jdbc.connection.ak AK/SK认证密钥。 如果使用AK/SK认证方式。 是 accesskey=your-access-key kyuubi.engine.dli.jdbc.connection.sk DLI的区域名称和服务名称。 如果使用AK/SK认证方式时配置。 是 secretkey=your-secret-key kyuubi.engine.dli.jdbc.connection.project DLI资源所在的项目ID。 是 0b33ea2a7e0010802fe4c009bb05076d kyuubi.engine.dli.sql.limit.time.sec SQL查询的执行时间限制。 默认600s 否 300 kyuubi.engine.dli.result.line.num.limit SQL查询的返回的最大条数。 默认返回10万条。 配置为-1代表不限制返回的条数。 是 50000 kyuubi.engine.dli.small.file.merge 配置是否开启小文件自动合并。默认为false,代表不开启。 true:开启 false:不开启 是 true kyuubi.engine.dli.bi.type 用于指定BI工具类型。 支持fine/ grafana/ superset/ tableau/ power/dbt/yongHong 是 fine kyuubi.engine.dli.boolean.type.to.int 定义DLI的Boolean类型数据是以1/0返回,还是true/false返回 当BI工具类型为Grafana时,需要设置为true。 true:按1/0返回(1:代表true,0:fales)。 false:按true/false返回。 默认取值false。 否 false kyuubi.engine.dli.set.conf.transform.to.annotation 支持在SQL中设置set spark参数。 PowerBI、FineBI、SuperSet、DBT需要设置为true。 否 true kyuubi.engine.dli.set.conf.sql.suffix 支持在SQL中尾端设置set spark参数。 PowerBI、DBT需要设置为true。 否 true kyuubi.engine.dli.result.cache.enable 是否开启库表数据缓存,开启后自动缓存库表信息。默认为true。 true:开启 false:不开启 否 true kyuubi.engine.dli.cache.limit.line.num 配置缓存的最大条数。 默认缓存10万条。 配置为-1代表不限制缓存的最大条数。 否 1000 kyuubi.engine.dli.cache.time.sec 配置缓存的时间。 默认为1800s。 否 1800 kyuubi.operation.incremental.collect kyuubi会预加载select结果数据到缓存加快读取数据,数据量较大的场景防止内存OOM建议关闭。 否 false 配置为false代表关闭预加载。 kyuubi.engine.jdbc.memory jdbc engine进程内存。 默认为1g,建议改成5g以上加大jdbc engine进程内存使用。 否 5g 快速启动kyuubi。 进入云服务器的根目录/bin执行以下命令启动kyuubi。 cd /bin ./kyuubi start restart 连接成功后,可以执行SQL查询来测试Kyuubi与DLI的连接是否正常工作。 (可选)配置主机的host文件提高Kyuubi的访问效率 为了提高Kyuubi的访问效率,建议在主机的/etc/hosts 配置Kyuubi主机IP的映射关系。 执行ifconfig查看主机IP地址。 图2 查看主机IP地址 将该IP配置在/etc/hosts文件中。 图3 在/etc/hosts文件中配置IP地址
共100000条
提示

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