云服务器内容精选

  • GaussDB (DWS)数据库加密 在GaussDB(DWS)中,您可以为集群启用数据库加密,以保护静态数据。当您为集群启用加密时,该集群及其快照的数据都会得到加密处理。您可以在创建集群时启用加密。加密是集群的一项可选且不可变的设置。要从未加密的集群更改为加密集群,必须从现有集群导出数据,然后在已启用数据库加密的新集群中重新导入这些数据。数据库加密是在数据落盘时进行加密,即在往GaussDB(DWS)写入数据时GaussDB(DWS)会对数据进行加密,而在用户查询数据时GaussDB(DWS)会将数据自动进行解密后再将结果返回给用户。 如果希望加密,可以在集群创建时启用加密。虽然加密是GaussDB(DWS)集群中的一项可选设置,但建议您为集群启用该设置以保护数据。 DWS 3.0集群暂不支持数据库加密功能。 数据库加密功能创建集群时选择是否开启,一旦开启就无法关闭。详情请参见加密数据库。 普通集群创建完后,可以通过转加密集群功能,将集群转成加密集群。 开启数据库加密功能后,用于加密GaussDB(DWS)数据库的KMS密钥在使用过程中不能被禁用、删除或冻结,否则会导致GaussDB(DWS)集群异常或数据库不可用。 开启数据库加密功能后创建的快照不支持使用openAPI做恢复。
  • 加密密钥轮转 加密密钥轮转是指更新保存在GaussDB(DWS)服务的密文。在GaussDB(DWS)中,您可以轮转已加密集群的加密密钥CEK。 密钥轮转流程如下: GaussDB(DWS)集群启动密钥轮转。 GaussDB(DWS)根据集群的主密钥来解密保存在GaussDB(DWS)服务中的CEK密文,获取CEK明文。 用获取到的CEK明文解密保存在GaussDB(DWS)服务中的DEK密文,获取DEK明文。 GaussDB(DWS)重新生成新的CEK明文。 GaussDB(DWS)用新的CEK明文加密DEK并将DEK密文保存在GaussDB(DWS) 服务中。 用主密钥加密新的CEK明文并将CEK密文保存在GaussDB(DWS)服务中。 您可以根据业务需求和数据类型计划轮转加密密钥的时间。为了提高数据的安全性,建议用户定期执行轮转密钥以避免密钥被破解的风险。一旦您发现密钥可能已泄露,请及时轮转密钥。 GaussDB(DWS)轮转集群的CEK时,集群相关的快照不需要轮转CEK,因为CEK不会在集群快照中进行保存,CEK明文是保存在GaussDB(DWS)集群内存中的,密文是保存在GaussDB(DWS)服务中的。 由于密钥轮转不更新DEK,所以对于数据的加解密不会有影响。
  • 使用KMS服务加密GaussDB(DWS)数据库 当选择KMS(密钥管理服务)对GaussDB(DWS)进行密钥管理时,加密密钥层次结构有三层。按层次结构顺序排列,这些密钥为主密钥(CMK)、集群加密密钥 (CEK)、数据库加密密钥 (DEK)。 主密钥用于给CEK加密,保存在KMS中。 CEK用于加密DEK,CEK明文保存在GaussDB(DWS)集群内存中,密文保存在GaussDB(DWS)服务中。 DEK用于加密数据库中的数据,DEK明文保存在GaussDB(DWS)集群内存中,密文保存在GaussDB(DWS)服务中。 密钥使用流程如下: 用户选择主密钥。 GaussDB(DWS)随机生成CEK和DEK明文。 KMS使用用户所选的主密钥加密CEK明文并将加密后的CEK密文导入到GaussDB(DWS)服务中。 GaussDB(DWS)使用CEK明文加密DEK明文并将加密后的DEK密文保存到GaussDB(DWS)服务中。 GaussDB(DWS)将DEK明文传递到集群中并加载到集群内存中。 当该集群重启时,集群会自动通过API向GaussDB(DWS)请求DEK明文,GaussDB(DWS)将CEK、DEK密文加载到集群内存中,再调用KMS使用主密钥CMK来解密CEK,并加载到集群内存中,最后用CEK明文解密DEK,并加载到集群内存中,返回给集群。
  • 包年/包月计费模式 表4 包年/包月计费模式显示说明 状态 说明 XX后到期 包周期集群剩余时长。可进行续费、转按需、退订操作。 已过期, XX后冻结 包周期集群购买时长到期,未续费时会进入宽限期。宽限期包周期集群正常使用,可进行续费操作,不可进行转按需、退订操作。 已冻结, XX后删除 包周期集群宽限期结束,进入保留期。可进行续费操作,不可进行转按需、退订操作。 XX后转按需 包周期集群购买时长到期后转成按需集群。可进行续费、退订操作,不可进行转按需操作。 已冻结(违规) 公安冻结资源。可进行续费操作,不可进行转按需、退订操作。冻结期间会继续收取费用。 已冻结(违规), XX后删除 违规冻结资源。可进行续费操作,不可进行转按需、退订操作。冻结期间会继续收取费用。
  • 集群状态 表2 集群状态说明 状态 说明 可用 表示集群工作正常。 只读 集群存储容量使用率或单节点磁盘使用率大于90%时会进入此状态,该状态下集群仍可工作但只能支持查询操作,不支持任何写操作。当集群进入只读状态时,可通过解除只读功能进行解除,如解除失败请联系技术支持人员解除只读状态。 解除集群只读状态后,建议您参考以下措施进行处理: 使用SQL客户端工具,以管理员用户连接数据库,执行以下命令定期清理和回收存储空间。 1 VACUUM FULL; GaussDB(DWS) 数据仓库 中保存的数据在删除后,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费,建议定期清理存储空间。 建议用户检查磁盘容量,分析现有集群规格是否满足业务需求,若不满足,建议您对集群进行扩容,具体操作请参见集群扩容。 非均衡 如果集群中存在gtm或dn的角色和初始角色不一致,就认为处于非均衡状态。 非均衡状态下会出现某些节点主实例增多,从而负载压力较大。这种情况下集群状态是正常的,但整体性能要不如均衡状态。建议业务低峰期,切换为可用状态,详情操作请参见集群主备恢复。 重分布中 集群扩容时新节点添加完成后,原节点存储的业务数据明显多于新节点,此时系统自动在所有节点重新分布保存数据。该状态下集群仍可工作。 重分布失败 调整数据分布情况失败,但没有数据丢失。该状态下集群仍可工作。建议用户联系技术支持人员进行处理。 节点故障 表示集群中个别节点出现问题无法正常工作,但整个集群正常。建议用户联系技术支持人员进行处理。 不可用 表示集群无法提供数据库服务。建议用户联系技术支持人员进行处理。 创建中 表示集群正在创建中。 创建失败 表示集群创建失败。 创建中,恢复中 表示集群正在创建中,且该集群是快照恢复而创建的集群,此时集群正在恢复中。当对快照执行了恢复操作时,会恢复快照到新集群,此时该新集群会进入此状态。 删除中 表示集群正在删除中。 公安冻结 表示集群被公安冻结,公安冻结情况下不允许删除或退订集群,且不支持修改集群名称。 已冻结 表示集群被冻结(除公安冻结之外的冻结场景),不支持修改集群名称。 当您的账户余额不足导致系统扣费失败时,您的服务资源将会进入保留期,保留期内服务资源将被冻结而无法使用,但资源和数据会为您保留。当集群状态为“已冻结”时,您需要给账户充值以确保账户余额不为0才能解冻,详细操作请参见如何续费?。 待重启 表示集群修改过GUC参数,需重启才能生效。若并未重启集群,此时部分运维操作会被限制。在用户手动重启集群后,GUC参数生效,集群状态将恢复为“可用”。 已停止 表示集群已停止。
  • 集群任务信息 表3 任务信息说明 状态 说明 创建快照中 表示集群正在执行创建快照的操作。 创建快照失败 表示集群执行快照创建操作失败。 观察中 表示集群在用户自助升级操作后待提交阶段。 配置中 表示系统正在保存集群参数的修改。 重启中 表示集群正在重启过程中。 重启失败 表示集群重启操作失败。 转加密集群中 表示集群正在转加密集群过程中。 转加密集群失败 表示集群转加密失败。 节点扩容 表示集群正在扩容中。 扩容失败 表示集群扩容失败。 磁盘扩容中 表示集群正在磁盘扩容中。 磁盘扩容失败 表示集群磁盘扩容失败。 弹性负载均衡绑定中 表示集群正在绑定弹性负载均衡。 弹性负载均衡绑定失败 表示集群绑定弹性负载均衡失败。 弹性负载均衡解绑中 表示集群正在解绑弹性负载均衡。 弹性负载均衡解绑失败 表示集群解绑弹性负载均衡失败。 缩容检测中 表示集群正在检测是否满足缩容条件。 缩容检测失败 表示集群目前的状态不满足缩容: 集群default_storage_nodegroup参数值不为installation。 集群数据库下data_redis为预留重分布schema,该schema中存在用户表。 用户集群磁盘空间不满足缩容条件,详情请参见集群缩容。 缩容中 表示集群正在缩容中。 缩容失败 表示集群缩容失败,需要用户尽快手动重新执行缩容,否则会影响业务。 主备恢复中 表示集群正在主备恢复中。 主备恢复失败 表示集群主备恢复失败,失败原因有以下几种情况,详情请参见管控面错误码参考: 正在执行DN REDO,请稍后重试, 等待redo做完之后重试主备恢复。 查询DN REDO失败,请查看租户侧 日志分析 失败原因。 存在主备追赶,请稍后重试,等待主备追赶做完之后重试主备恢复。 查询主备追赶失败,请查看租户侧日志分析失败原因。 主备恢复失败,请联系技术支持人员或稍后重试。请查看租户侧日志分析失败原因。 集群状态异常,无法进行主备恢复操作,请检查集群状态是否是normal状态。 弹性变更规格中 表示集群正在弹性变更集群规格中。 弹性变更规格失败 表示集群弹性规格变更失败。 订单待支付 表示按需集群转包周期集群订单未支付,完成订单支付或取消订单该状态消失。 经典变更规格 表示集群正在进行经典变更规格中。 经典变更规格失败 表示经典变更规格失败,其中配额、用户权限以及集群状态都有可能导致失败。 维护中 表示集群正在进行维护变更操作,如集群升级、插件升级等。 维护失败 表示集群升级操作失败。 停止中 表示集群正在停止中。 启动中 表示集群正在启动中。 巡检中 表示集群正在做变更前的巡检。 巡检失败 表示集群巡检操作失败。
  • 支持的事件类别和事件 事件是用户集群状态发生变化的记录。它可以是由用户操作触发的(比如审计事件),也有可能是集群服务状态变化引起的(比如集群修复成功或集群修复失败)。以下为当前GaussDB(DWS)支持的事件和事件类别列表。 下表显示了事件源类型为集群的事件 表1 事件源类型为集群的事件 事件类别 事件名称 事件级别 事件 管理 createClusterFail 警告 集群创建失败。 管理 createClusterSuccess 正常 集群创建成功。 管理 createCluster 正常 开始创建集群。 管理 extendCluster 正常 开始扩容集群。 管理 extendClusterSuccess 正常 集群扩容成功。 管理 extendClusterFail 警告 集群扩容失败。 管理 deleteClusterFail 警告 集群删除失败。 管理 deleteClusterSuccess 正常 集群删除成功。 管理 deleteCluster 正常 开始删除集群。 管理 restoreClusterFail 警告 集群恢复失败。 管理 restoreClusterSuccess 正常 集群恢复成功。 管理 restoreCluster 正常 开始恢复集群。 管理 restartClusterFail 警告 集群重启失败。 管理 restartClusterSuccess 正常 集群重启成功。 管理 restartCluster 正常 开始重启集群。 管理 configure MRS ExtDataSources 正常 开始配置集群的MRS外部数据源。 管理 configureMRSExtDataSourcesFail 警告 配置集群的MRS外部数据源失败。 管理 configureMRSExtDataSourcesSuccess 正常 配置集群的MRS外部数据源成功。 管理 deleteMRSExtDataSources 正常 开始删除集群MRS外部数据源。 管理 deleteMRSExtDataSourcesFail 警告 删除集群MRS外部数据源失败。 管理 deletedMRSExtDataSourcesSuccess 正常 删除集群MRS外部数据源成功。 管理 bindEipToCluster 正常 集群绑定EIP。 管理 bindEipToClusterFail 警告 集群绑定EIP失败。 管理 unbindEipToCluster 正常 集群解绑EIP。 管理 unbindEipToClusterFail 警告 集群解绑EIP失败。 管理 refreshEipToCluster 正常 集群刷新EIP。 管理 refreshEipToClusterFail 警告 集群刷新EIP失败。 管理 dmsClusterMonitoringEnabledSuccessfully 正常 打开DMS集群监控开关成功。 管理 failedToEnableDmsClusterMonitoring 正常 打开DMS集群监控开关失败。 管理 dmsClusterMonitoringDisabledSuccessfully 正常 关闭DMS集群监控开关成功。 管理 failedToDisableDmsClusterMonitoring 正常 关闭DMS集群监控开关失败。 管理 dmsMetricCollectionEnabledSuccessfully 正常 打开DMS采集成功。 管理 failedToEnableDmsMetricCollection 正常 打开DMS采集失败。 管理 dmsMetricCollectionDisabledSuccessfully 正常 关闭DMS采集成功。 管理 failedToDisableDmsMetricCollection 正常 关闭DMS采集失败。 管理 dmsMetricCollectionResetSuccessfully 正常 重置DMS采集成功。 管理 failedToResetDmsMetricCollection 正常 重置DMS采集失败 管理 dmsMetricCollectionUpdatedSuccessfully 正常 更新DMS采集成功 管理 failedToUpdateDmsMetricCollection 正常 更新DMS采集失败。 管理 dmsMetricDataRetentionPeriodUpdatedSuccessfully 正常 更新DMS采集存储时间成功。 管理 failedToUpdateTheDmsMetricDataRetentionPeriod 正常 更新DMS采集存储时间失败。 管理 dmsSessionsTerminatedSuccessfully 正常 DMS终止会话成功。 管理 failedToTerminateDmsSessions 正常 DMS终止会话失败。 管理 dmsQueriesTerminatedSuccessfully 正常 DMS终止查询成功。 管理 failedToTerminateDmsQueries 正常 DMS终止查询失败。 管理 dmsCreateWDRSuccessfully 正常 DMS生成负荷报告任务下发成功。 管理 failedToCreateWDR 警告 DMS生成负荷报告任务下发失败。 管理 dmsDeleteWDRSuccessfully 正常 DMS删除负荷报告成功。 管理 failedToDeleteWDR 警告 DMS删除负荷报告失败。 管理 dmsUpdateWDRConfigSuccessfully 正常 DMS更新负荷报告参数成功。 管理 failedToUpdateWDRConfig 警告 DMS更新负荷报告参数失败。 管理 dmsCreateWorkloadSnapshotSuccessfully 正常 DMS新增负荷快照任务下发成功。 管理 failedToCreateWorkloadSnapshot 警告 DMS新增负荷快照任务下发失败。 安全 resetPasswordFail 警告 集群密码重置失败。 安全 resetPasswordSuccess 正常 集群密码重置成功。 安全 updateConfiguration 正常 开始更新集群安全参数。 安全 updateConfigurationFail 警告 更新集群安全参数失败。 安全 updateConfigurationSuccess 正常 更新集群安全参数成功。 监控 repairCluster 正常 节点故障,开始修复集群。 监控 repairClusterFail 警告 集群修复失败。 监控 repairClusterSuccess 正常 集群修复成功。 下表显示了事件源类型为快照的事件 表2 事件源类型为快照的事件 事件类别 事件名称 事件级别 事件 管理 deleteBackup 正常 快照删除成功。 管理 deleteBackupFail 警告 快照删除失败。 管理 createBackup 正常 开始创建快照。 管理 createBackupSuccess 正常 快照创建成功。 管理 createBackupFail 警告 快照创建失败。 下表显示了事件源类型为容灾的事件 表3 事件源类型为容灾的事件 事件类别 事件名称 事件级别 事件 管理 beginCreateDisasterRecovery 正常 开始创建容灾。 管理 createDisasterRecoverySuccess 正常 创建容灾成功。 管理 createDisasterRecoveryFail 警告 创建容灾失败。 管理 beginStartDisasterRecovery 正常 开始启动容灾。 管理 startDisasterRecoverySuccess 正常 启动容灾成功。 管理 startDisasterRecoveryFail 警告 启动容灾失败。 管理 beginStopDisasterRecovery 正常 开始停止容灾。 管理 stopDisasterRecoverySuccess 正常 停止容灾成功 管理 stopDisasterRecoveryFail 警告 停止容灾失败。 管理 beginSwitchoverDisasterRecovery 正常 开始灾备切换。 管理 switchoverDisasterRecoverySuccess 正常 灾备切换成功。 管理 switchoverDisasterRecoveryFail 警告 灾备切换失败。 管理 beginDeleteDisasterRecovery 正常 开始删除容灾。 管理 deleteDisasterRecoverySuccess 正常 删除容灾成功。 管理 deleteDisasterRecoveryFail 警告 删除容灾失败。 管理 disasterRecoveryAbnormal 警告 容灾运行异常。 管理 beginFailoverDisasterRecovery 正常 开始异常切换。 管理 failoverDisasterRecoverySuccess 正常 异常切换成功。 管理 failoverDisasterRecoveryFail 警告 异常切换失败。 管理 beginRecoveryDisaster 正常 开始恢复容灾。 管理 recoveryDisasterSuccess 正常 恢复容灾成功。 管理 recoveryDisasterFail 警告 恢复容灾失败。 管理 emptyDisasterRecovery 警告 当前容灾对象内无容灾表。 管理 switchoverContinueAsFailoverDisasterRecovery 警告 灾备切换降级为异常切换。 下表显示了事件源类型为数据迁移的事件 表4 事件源类型为数据迁移的事件 事件类别 事件名称 事件级别 事件 数据迁移 dataMigrationApplicationDetectedAbnormal 警告 作业任务状态异常。 数据迁移 dataMigrationApplicationReturnNormal 正常 作业任务恢复正常。 数据迁移 dataMigrationCreateApplication 正常 创建作业任务。 数据迁移 dataMigrationCreateCluster 正常 开始创建数据迁移实例。 数据迁移 dataMigrationCreateClusterFailed 警告 数据迁移实例创建失败。 数据迁移 dataMigrationCreateClusterSuccess 正常 数据迁移实例创建成功。 数据迁移 dataMigrationCreateConnection 正常 创建连接配置。 数据迁移 dataMigrationCreateMapping 正常 创建表映射配置。 数据迁移 dataMigrationDeleteApplication 正常 开始删除作业任务。 数据迁移 dataMigrationDeleteApplicationFailed 警告 作业任务删除失败。 数据迁移 dataMigrationDeleteApplicationSuccess 正常 作业任务删除成功。 数据迁移 dataMigrationDeleteCluster 正常 开始删除数据迁移实例。 数据迁移 dataMigrationDeleteClusterApplication 正常 开始删除作业任务。 数据迁移 dataMigrationDeleteClusterApplicationFailed 警告 作业任务删除失败。 数据迁移 dataMigrationDeleteClusterApplicationSuccess 正常 作业任务删除成功。 数据迁移 dataMigrationDeleteClusterFailed 警告 数据迁移实例删除失败。 数据迁移 dataMigrationDeleteClusterSuccess 正常 数据迁移实例删除成功。 数据迁移 dataMigrationDeleteConnection 正常 删除连接配置。 数据迁移 dataMigrationDeleteMapping 正常 删除表映射配置。 数据迁移 dataMigrationDialsConnection 正常 测试连接配置。 数据迁移 dataMigrationModifyConnection 正常 修改连接配置。 数据迁移 dataMigrationModifyMapping 正常 修改表映射配置。 数据迁移 dataMigrationStartApplication 正常 开始启动作业任务。 数据迁移 dataMigrationStartApplicationFailed 警告 作业任务启动失败。 数据迁移 dataMigrationStartApplicationSuccess 正常 作业任务启动成功。 数据迁移 dataMigrationStopApplication 正常 开始停止作业任务。 数据迁移 dataMigrationStopApplicationFailed 警告 作业任务停止失败。 数据迁移 dataMigrationStopApplicationSuccess 正常 作业任务停止成功。
  • 概述 GaussDB(DWS) 使用 SMN (Simple Message Notification, 消息通知 服务)发送GaussDB(DWS) 事件的通知,订阅GaussDB(DWS) 事件即可启用通知。在订阅中,用户需要指定一个或多个事件筛选条件。每当发生与所有筛选条件匹配的事件时,GaussDB(DWS) 就会通过该订阅发送通知。筛选条件包含事件类别(例如:管理、监控或安全)、事件级别(例如:正常或警告)和事件源类型(例如:集群或快照)。
  • Kafka实时入库到GaussDB(DWS) 通过 数据湖探索 服务 DLI Flink作业将Kafka的消费数据实时同步至GaussDB(DWS)数据仓库,实现Kafka实时入库到GaussDB(DWS)的过程。 了解DLI请参见 数据湖 产品介绍 。 了解Kafka请参见分布式消息服务Kafka产品介绍。 图1 Kafka实时入库DWS 具体操作请参见通过DLI Flink作业将Kafka数据实时写入DWS。 父主题: 实时入库
  • 多表并发导出操作步骤 通过创建的两个外表,将数据库中的两个表分别导出至OBS的桶中。 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文件存放的两个桶“/input-data1”“/input-data2”,并创建每个桶下面的data目录“/input-data1/data”“/input-data2/data”。 在GaussDB(DWS)数据库上,创建外表tpcds.customer_address_ext1和tpcds.customer_address_ext2分别用于OBS服务器接收导出的数据。 规划OBS与集群处于同一区域,需要导出的表为已存在的表tpcds.customer_address和tpcds.customer_demographics。 其中设置的导出信息如下所示: 由于OBS服务器上的数据源文件存放目录为“/input-data1/data/ ”和/input-data2/data/ ,所以设置tpcds.customer_address_ext1参数“location”为“obs://input-data1/data/ ”,设置tpcds.customer_address_ext2参数“location”为“ obs://input-data2/data/”。 设置的数据格式信息是根据表从GaussDB(DWS)中导出时需要的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为“ CS V”。 编码格式(encoding)为“UTF-8”。 字段分隔符(delimiter)为“E'\x08'”。 是否使用加密(encrypt),默认为“off”。 (必选)用户获取OBS访问协议对应的AK值(access_key )。 (必选)用户获取OBS访问协议对应的SK值(secret_access_key)。 用户在创建用户时已经获取了access_key和secret_access_key的密钥,请根据实际密钥替换示例中的内容。 根据以上信息,创建的外表如下所示: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 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 CREATE FOREIGN TABLE tpcds.customer_address_ext1 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data1/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', AC CES S_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 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 CREATE FOREIGN TABLE tpcds.customer_address_ext2 ( ca_address_sk integer , ca_address_id char(16) , ca_address_name varchar(20) , ca_address_code integer , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input_data2/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', QUOTE E'\x1b', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 在GaussDB(DWS)数据库上,将数据表tpcds.customer_address和tpcds.warehouse并发导出到外表tpcds.customer_address_ext1和tpcds.customer_address_ext2中。 1 INSERT INTO tpcds.customer_address_ext1 SELECT * FROM tpcds.customer_address; 1 INSERT INTO tpcds.customer_address_ext2 SELECT * FROM tpcds.warehouse;
  • 单表导出操作步骤 通过创建外表,将数据库中的单表导出至OBS的两个桶中。 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文件存放的两个桶“/input-data1”“/input-data2”,并创建每个桶下面的data目录“/input-data1/data”“/input-data2/data”。 在GaussDB(DWS)数据库上,创建外表tpcds.customer_address_ext1和tpcds.customer_address_ext2用于OBS数据服务器接收数据库导出数据。 OBS与集群处于同一区域,需要导出的表为GaussDB(DWS)示例表tpcds.customer_address。 其中设置的导出信息如下所示: 由于OBS数据服务器上的数据源文件存放目录为“/input-data1/data/ ”和/input-data2/data/ ,所以设置tpcds.customer_address_ext1参数“location”为“obs://input-data1/data/ ”,设置tpcds.customer_address_ext2参数“location”为“ obs://input-data2/data/”。 设置的数据格式信息是根据表从数据库导出时需要的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为“CSV”。 编码格式(encoding)为“UTF-8”。 字段分隔符(delimiter)为“E'\x08'”。 是否使用加密(encrypt),默认为“off”。 (必选)用户获取OBS访问协议对应的AK值(access_key )。 (必选)用户获取OBS访问协议对应的SK值(secret_access_key)。 用户在创建用户时已经获取了access_key和secret_access_key的密钥,请根据实际密钥替换示例中的内容。 根据以上信息,创建的外表如下所示: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 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 CREATE FOREIGN TABLE tpcds.customer_address_ext1 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data1/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 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 CREATE FOREIGN TABLE tpcds.customer_address_ext2 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data2/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 在GaussDB(DWS)数据库上,将数据表tpcds.customer_address并发导出到外表tpcds.customer_address_ext1和tpcds.customer_address_ext2中。 1 INSERT INTO tpcds.customer_address_ext1 SELECT * FROM tpcds.customer_address; 1 INSERT INTO tpcds.customer_address_ext2 SELECT * FROM tpcds.customer_address; OBS外表在设计上禁止往非空的路径下导出文件,但是在并发场景下会出现同一路径导出文件的情况,此时会发生异常。 异常场景:假如用户使用同一张表的数据并发导出到同一个OBS的外表,在一条SQL语句执行在OBS服务器上没有生成文件时,另一条SQL语句也执行导出,最终执行结果为两条SQL语句均执行成功,产生数据覆盖现象,建议用户在执行OBS外表导出任务时,不要往同一OBS外表并发导出。
  • 集群间不落地数据导入 启动GDS。(如果已经启动跳过此步骤) gds -d /***/gds_data/ -D -p GDS_IP:GDS_PORT -l /***/gds_log/aa.log -H 0/0 -t 10 -D 如果需要设置管道文件的超时时间,则使用--pipe-timeout参数设置。 源数据库数据导出。 登录目标数据库创建内表,并写入数据。 CREATE TABLE test_pipe( id integer not null, gender text not null, name text ); INSERT INTO test_pipe values(1,2,'11111111111111'); INSERT INTO test_pipe values(2,2,'11111111111111'); INSERT INTO test_pipe values(3,2,'11111111111111'); INSERT INTO test_pipe values(4,2,'11111111111111'); INSERT INTO test_pipe values(5,2,'11111111111111'); 创建只写外表。 CREATE FOREIGN TABLE foreign_test_pipe( id integer not null, age text not null, name text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe') WRITE ONLY; 导入语句,此时语句会阻塞。 INSERT INTO foreign_test_pipe SELECT * FROM test_pipe; 目标集群导入数据。 创建内表。 CREATE TABLE test_pipe (id integer not null, gender text not null, name text); 创建只读外表。 CREATE FOREIGN TABLE foreign_test_pipe(like test_pipe) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' , file_type 'pipe', auto_create_pipe 'false'); 执行导入语句: INSERT INTO test_pipe SELECT * FROM foreign_test_pipe; 查看目标集群导入语句返回的结果: SELECT * FROM test_pipe; id | gender | name ----+-----+---------------- 3 | 2 | 11111111111111 6 | 2 | 11111111111111 7 | 2 | 11111111111111 1 | 2 | 11111111111111 2 | 2 | 11111111111111 4 | 2 | 11111111111111 5 | 2 | 11111111111111 8 | 2 | 11111111111111 9 | 2 | 11111111111111 (9 rows) GDS默认导出或者导入的管道文件命名规则为:“数据库名_模式名_外表名.pipe”,因此默认需要目标集群与源集群的数据库名及模式名保持一致。如果数据库或模式不一致,则可以在location的url中指定相同的管道文件。 示例: 只写外表指定管道名。 CREATE FOREIGN TABLE foreign_test_pipe(id integer not null, age text not null, name text) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/foreign_test_pipe.pipe', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe') WRITE ONLY; 只读外表指定管道名。 CREATE FOREIGN TABLE foreign_test_pipe(like test_pipe) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/foreign_test_pipe.pipe', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe',auto_create_pipe 'false');
  • 多线程导入 规划数据服务器与集群处于同一内网,数据服务器IP为192.168.0.90,导入的数据源文件格式为CSV,同时导入2个目标表。 以root用户登录GDS数据服务器,创建数据文件存放目录“/input_data”,以及子目录“/input_data/import1/”和“/input_data/import2/”。 mkdir -p /input_data 将目标表tpcds.reasons1的数据源文件存放在数据服务器“/input_data/import1/”目录下,将目标表tpcds.reasons2的数据源文件存放在目录“/input_data/import2/”下。 (可选)创建用户及其所属的用户组。此用户用于启动GDS。若该用户及所属用户组已存在,可跳过此步骤。 groupadd gdsgrp useradd -g gdsgrp gds_user 修改数据服务器上数据文件及数据文件目录“/input_data”的属主为gds_user。 chown -R gds_user:gdsgrp /input_data 以gds_user用户登录数据服务器上启动GDS。 其中GDS安装路径为“/opt/bin/dws/gds”,数据文件存放在“/input_data/”目录下,数据服务器所在IP为192.168.0.90,GDS监听端口为5000,以后台方式运行,设定并发度为2,并设定递归文件目录。 /opt/bin/dws/gds/bin/gds -d /input_data -p 192.168.0.90:5000 -H 10.10.0.1/24 -D -t 2 -r 使用工具连接数据库。详见连接数据库。 在数据库中创建导入的目标表tpcds.reasons1和tpcds.reasons2。 1 2 3 4 5 6 CREATE TABLE tpcds.reasons1 ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) ; 1 2 3 4 5 6 CREATE TABLE tpcds.reasons2 ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) ; 在数据库中创建外表tpcds.foreign_tpcds_reasons1和tpcds.foreign_tpcds_reasons2用于接收数据服务器上的数据。 以下以外表tpcds.foreign_tpcds_reasons1为例,讲解设置的导入外表参数信息。 其中设置的导入模式信息如下所示: 导入模式为Normal模式。 由于启动GDS时,设置的数据源文件存放目录为“/input_data/”,GDS监听端口为5000,实际存放数据源文件目录为“/input_data/import1/”,所以设置参数“location”为“gsfs://192.168.0.90:5000/import1/*”。 设置的数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 字段分隔符(delimiter)为E'\x08'。 引号字符(quote)为E'\x1b'。 数据文件中空值(null)为没有引号的空字符串。 逃逸字符(escape)默认和quote相同。 数据文件是否包含标题行(header)为默认值false,即导入时数据文件第一行被识别为数据。 设置的导入容错性如下所示: 允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。 将数据导入过程中出现的数据格式错误信息( LOG INTO error_table_name)写入表err_tpcds_reasons1。 当数据源文件中一行的最后一个字段缺失(fill_missing_fields)时,自动设置为NULL。 根据以上信息,创建的外表tpcds.foreign_tpcds_reasons1如下所示: 1 2 3 4 5 6 CREATE FOREIGN TABLE tpcds.foreign_tpcds_reasons1 ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/import1/*', format 'CSV',mode 'Normal', encoding 'utf8', delimiter E'\x08', quote E'\x1b', null '',fill_missing_fields 'on')LOG INTO err_tpcds_reasons1 PER NODE REJECT LIMIT 'unlimited'; 参考以上设置,创建的外表tpcds.foreign_tpcds_reasons2如下所示: 1 2 3 4 5 6 CREATE FOREIGN TABLE tpcds.foreign_tpcds_reasons2 ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/import2/*', format 'CSV',mode 'Normal', encoding 'utf8', delimiter E'\x08', quote E'\x1b', null '',fill_missing_fields 'on')LOG INTO err_tpcds_reasons2 PER NODE REJECT LIMIT 'unlimited'; 通过外表tpcds.foreign_tpcds_reasons1和tpcds.foreign_tpcds_reasons2将数据分别导入tpcds.reasons1和tpcds.reasons2。 1 INSERT INTO tpcds.reasons1 SELECT * FROM tpcds.foreign_tpcds_reasons1; 1 INSERT INTO tpcds.reasons2 SELECT * FROM tpcds.foreign_tpcds_reasons2; 查询错误信息表err_tpcds_reasons1和err_tpcds_reasons2,处理数据导入错误。详细请参见处理导入错误。 1 2 SELECT * FROM err_tpcds_reasons1; SELECT * FROM err_tpcds_reasons2; 待数据导入完成后,以gds_user用户登录数据服务器,停止GDS。 其中GDS进程号为128954。 ps -ef|grep gds gds_user 128954 1 0 15:03 ? 00:00:00 gds -d /input_data -p 192.168.0.90:5000 -D -t 2 -r gds_user 129003 118723 0 15:04 pts/0 00:00:00 grep gds kill -9 128954
  • 多数据服务器并行导入 规划数据服务器与集群处于同一内网,数据服务器IP为192.168.0.90和192.168.0.91。数据源文件格式为CSV。 以root用户登录每台GDS数据服务器,在两台数据服务器上,分别创建数据文件存放目录“/input_data”。以下以IP为192.168.0.90的数据服务器为例进行操作,剩余服务器上的操作与它一致。 mkdir -p /input_data (可选)创建用户及其所属的用户组。此用户用于启动GDS。若该类用户及所属用户组已存在,可跳过此步骤。 groupadd gdsgrp useradd -g gdsgrp gds_user 将准备好的CSV格式数据源文件均匀分发至相应数据服务器的“/input_data”目录中。 修改每台数据服务器上数据文件及数据文件目录“/input_data”的属主为gds_user。以下以IP为192.168.0.90的数据服务器为例,进行操作。 chown -R gds_user:gdsgrp /input_data 以gds_user用户登录每台数据服务器上分别启动GDS。 其中GDS安装路径为“/opt/bin/dws/gds”,数据文件存放在“/input_data/”目录下,数据服务器所在IP为192.168.0.90和192.168.0.91,GDS监听端口为5000,以后台方式运行。 在IP为192.168.0.90的数据服务器上启动GDS。 /opt/bin/dws/gds/bin/gds -d /input_data -p 192.168.0.90:5000 -H 10.10.0.1/24 -D 在IP为192.168.0.91的数据服务器上启动GDS。 /opt/bin/dws/gds/bin/gds -d /input_data -p 192.168.0.91:5000 -H 10.10.0.1/24 -D 使用工具连接数据库。详见连接数据库。 创建导入的目标表tpcds.reasons。 1 2 3 4 5 6 CREATE TABLE tpcds.reasons ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ); 创建外表tpcds.foreign_tpcds_reasons用于接收数据服务器上的数据。 其中设置导入模式信息如下所示: 导入模式为Normal模式。 由于启动GDS时,设置的数据源文件存放目录为“/input_data”,GDS监听端口为5000,所以设置参数“location”为“gsfs://192.168.0.90:5000/* | gsfs://192.168.0.91:5000/*”。 设置数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 字段分隔符(delimiter)为E'\x08'。 引号字符(quote)为E'\x1b'。 数据文件中空值(null)为没有引号的空字符串。 逃逸字符(escape)默认和quote相同。 数据文件是否包含标题行(header)为默认值false,即导入时数据文件第一行被识别为数据。 设置导入容错性如下所示: 允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。 将数据导入过程中出现的数据格式错误信息(LOG INTO error_table_name)写入表err_tpcds_reasons。 根据以上信息,创建的外表如下所示: 1 2 3 4 5 6 7 CREATE FOREIGN TABLE tpcds.foreign_tpcds_reasons ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/* | gsfs://192.168.0.91:5000/*', format 'CSV',mode 'Normal', encoding 'utf8', delimiter E'\x08', quote E'\x1b', null '', fill_missing_fields 'false') LOG INTO err_tpcds_reasons PER NODE REJECT LIMIT 'unlimited'; 通过外表tpcds.foreign_tpcds_reasons,将数据导入目标表tpcds.reasons。 1 INSERT INTO tpcds.reasons SELECT * FROM tpcds.foreign_tpcds_reasons; 查询错误信息表err_tpcds_reasons,处理数据导入错误。详细请参见处理导入错误。 1 SELECT * FROM err_tpcds_reasons; 待数据导入完成后,以gds_user用户登录每台数据服务器,分别停止GDS。 以下以IP为192.168.0.90的数据服务器为例,停止GDS。其中GDS进程号为128954。 ps -ef|grep gds gds_user 128954 1 0 15:03 ? 00:00:00 gds -d /input_data -p 192.168.0.90:5000 -D gds_user 129003 118723 0 15:04 pts/0 00:00:00 grep gds kill -9 128954
  • 创建外部服务器 使用即将创建外部服务器的用户去连接其对应的数据库。 在本示例中,将使用(可选)新建用户及数据库并授予外表权限中创建的普通用户dbuser连接其创建的数据库mydatabase 。用户需要通过GaussDB(DWS)提供的数据库客户端连接数据库。 例如,使用gsql客户端的用户可以通过以下两种方法中的一种进行连接: 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户: 1 \c mydatabase dbuser; 根据提示输入密码。 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行“\q”退出gsql后,执行以下命令重新进行连接: 1 gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r 根据提示输入密码。 创建外部服务器。 例如,执行以下命令创建外部服务器“obs_server”: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 CREATE SERVER obs_server FOREIGN DATA WRAPPER dfs_fdw OPTIONS ( address 'obs.cn-north-1.myhuaweicloud.com' , ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', encrypt 'on', type 'obs' ); 以下为必选参数的说明: 外部服务器名称 允许用户自定义名字。 在本例中指定为“obs_server” 。 FOREIGN DATA WRAPPER fdw_name的名字可以是hdfs_fdw或者dfs_fdw,它在数据库中已经存在。 OPTIONS参数 address 指定OBS服务的终端节点。 address的获取方法如下: 先通过OBS上的数据准备中的2获取OBS路径。 在OBS上查看到的OBS路径,为OBS服务终端节点(Endpoint):obs.example.com。 访问密钥(AK和SK)(必选) GaussDB(DWS)需要通过访问密钥(AK和SK)访问OBS,因此,必须先获取访问密钥。 “access_key”(必选):表示用户的AK信息。 “secret_access_key”(必选):表示用户的SK信息。 获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)。 type 取值为“obs”,表示dfs_fdw连接的是OBS。 查看外部服务器: 1 SELECT * FROM pg_foreign_server WHERE srvname='obs_server'; 返回结果如下所示,表示已经创建成功: 1 2 3 4 5 6 srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions ------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- obs_server | 24661 | 13686 | | | | {address=xxx.xxx.x.xxx,access_key=xxxxxxxxxxxxxxxxxxxx,type=obs,secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} (1 row)