华为云用户手册

  • 响应参数 表2 要素说明 名称 参数类型 说明 tasks Array of objects 任务列表。 详情请参见表3 tasks字段数据结构说明。 total_count Integer 任务数量。 表3 tasks字段数据结构说明 名称 参数类型 说明 task_id String 任务ID。 task_name String 任务名称。 status String 任务状态。 create_time String 创建时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 start_time String 设置开始执行时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 instance_id String 实例ID。 instance_name String 实例名称。 task_content Object 任务信息。
  • 响应示例 查询任务列表成功。 { "tasks": [ { "status": "Completed", "task_id": "dea835aa-5ceb-4209-be57-ecd7992ed6af", "task_name": "HOTFIX_VERSION_UPGRADE", "create_time": "2024-12-16T06:54:39Z", "start_time": "2024-12-16T06:55:32Z", "instance_id": "54bef6617fab4a88ab52967218c34527in14", "instance_name": "gauss-ba81", "task_content": "3.208.0.6" }, { "status": "Completed", "task_id": "8d93aa3a-20c2-4c53-a3cf-933bde3ba002", "task_name": "HOTFIX_VERSION_UPGRADE", "create_time": "2024-12-16T06:54:39Z", "start_time": "2024-12-16T06:55:32Z", "instance_id": "096d0720b5604eca93b8a216a15d4778in14", "instance_name": "gauss-5185", "task_content": "3.208.0.6" }, { "status": "Completed", "task_id": "5111a1e3-0030-4766-8dd8-7ab73a2e89c4", "task_name": "HOTFIX_VERSION_UPGRADE", "create_time": "2024-12-16T08:51:11Z", "start_time": "2024-12-16T08:53:01Z", "instance_id": "b6ac63d384854e76ba7afd0e10aa9c29in14", "instance_name": "gauss-7fa8", "task_content": "3.208.0.7" } ], "total_count": 3 }
  • URI GET https://{Endpoint}/v3/{project_id}/instances/schedule-tasks 表1 参数说明 名称 是否必选 参数类型 说明 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 否 String 实例节点ID。 status 否 String 任务状态。 Running:运行中 Completed:完成 Failed:失败 Pending:待执行 Canceled:已取消 name 否 String 任务名称。 HOTFIX_VERSION_UPGRADE :热补丁版本升级。 start_time 否 String 开始时间。 格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 end_time 否 String 结束时间。 格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 offset 否 Integer 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数。 limit 否 Integer 查询记录数。默认为100,不能为负数,最小值为1,最大值为100。
  • 响应参数 表2 响应Body参数列表 名称 参数类型 说明 total Integer 总记录数。 relations Array of Objects 容灾关系详情。详情请参见表3。 表3 relations字段数据结构说明 名称 参数类型 说明 disaster_type String 容灾类型。 枚举值: stream:流式容灾。 name String 容灾任务名称。 disaster_role String 容灾角色。 枚举值: master:主实例。 disaster:灾备实例。 created String 创建时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 updated String 更新时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 slave_region_instance_info Object 备Region实例信息。详情请参见表4。 master_region_instance_info Object 主Region实例信息。详情请参见表5。 synchronization_id String 容灾关系唯一ID。 id String 容灾记录ID。 instance_id String 当前Region实例ID。 instance_name String 当前Region实例名称。 instance_status String 当前Region实例状态。 precheck_failed_reason String 预校验失败原因。 status String 容灾记录状态。 取值范围如下: pending:任务处理中。 normal:容灾关系正常。 failed:容灾搭建失败。 completed:容灾关系已解除。 failover:容灾已升主。 simulation:演练中。 dr_log_keep:日志保持中。 pre_checking:容灾预检查。 pre_check_failed:容灾预检查失败。 actions Array of Strings 实例当前正在执行的Action列表。 表4 slave_region_instance_info字段数据结构说明 名称 参数类型 说明 instance_id String 实例ID。 project_id String 实例项目ID。 project_name String 实例项目名称。 region_code String regionCode编码。 ip_address String 数据IP地址列表,使用英文逗号分割。 表5 master_region_instance_info字段数据结构说明 名称 参数类型 说明 instance_id String 实例ID。 project_id String 实例项目ID。 project_name String 实例项目名称。 region_code String regionCode编码。 ip_address String 数据IP地址列表,使用英文逗号分割。
  • 响应示例 { "total" : 1, "relations" : [ { "name" : "DR-task-0962", "created" : "2022-06-16 09:39:51", "updated" : "2022-06-16 09:44:55", "id" : "30b74120-4b50-495d-8174-7eeddf7feac5", "synchronization_id" : "9446f822-ccd2-43dc-929c-0b78ba7fdf64", "status" : "normal", "precheck_failed_reason" : "", "disaster_type" : "stream", "disaster_role" : "disaster", "slave_region_instance_info" : { "region_code" : "sa-fb-1", "instance_id" : "d1060faf0d3743dd8830b39e7423bc9ain14", "project_id" : "4a52a8a8f63d4c6d966dff0e20b69738", "project_name" : "sa-fb-1_ GaussDB ", "ip_address" : "172.166.1.192,172.166.0.6,172.166.1.135" }, "master_region_instance_info" : { "region_code" : "sa-fb-1", "instance_id" : "54d4b9fb131745fcba32cb90a05cabb8in14", "project_id" : "4a52a8a8f63d4c6d966dff0e20b69738", "project_name" : "sa-fb-1_GaussDB", "ip_address" : "172.167.1.86,172.167.0.89,172.167.1.229" }, "instance_id" : "d1060faf0d3743dd8830b39e7423bc9ain14", "instance_name" : "hly-0609-02", "instance_status" : "normal", "actions" : [ "STREAM_DISASTER_RELATION_MASTER_TAG" ] } ] }
  • URI GET https://{Endpoint}/v3.5/{project_id}/disaster-recovery/relations 表1 参数说明 名称 参数类型 是否必选 说明 project_id String 是 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_name String 否 实例名称,可查询过滤本端实例。 instance_id String 否 实例ID,可查询过滤本端实例ID。 limit Integer 否 查询记录数。为空时,默认为100。最小值为1,最大值为100。 offset Integer 否 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数。 dr_role String 否 容灾角色。 master:主实例。 disaster:灾备实例。 dr_type String 否 容灾类型。 stream:流式容灾。 dr_status String 否 容灾状态。 normal:容灾关系正常。 failover:容灾已升主。 pending:任务处理中。 pre_check_failed:容灾预检查失败。 pre_checking:容灾预检查。
  • URI POST https://{Endpoint}/v3.5/{project_id}/instances/{instance_id}/disaster-recovery/simulation-start 表1 参数说明 名称 是否必选 说明 project_id 是 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 实例ID。
  • 请求示例 POST https://gaussdb-opengauss.cn-north-1.myhuaweicloud.com/v3.5/0483b6b16e954cb88930a360d2c4e663/instances/c04c789b6baa4b6dbcc139c5226f3a2cin14/disaster-recovery/simulation-start { "xlog_keep_ratio":50, "disaster_type" : "stream" }
  • 请求示例 POST https://gaussdb-opengauss.cn-north-1.myhuaweicloud.com/v3.5/0483b6b16e954cb88930a360d2c4e663/instances/c04c789b6baa4b6dbcc139c5226f3a2cin14/reset-dr-config { "opposite_data_cidr" : "192.168.0.0/16" }
  • URI POST https://{Endpoint}/v3.5/{project_id}/instances/{instance_id}/reset-dr-config 表1 参数说明 名称 是否必选 说明 project_id 是 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 实例ID。
  • URI PUT https://{Endpoint}/v3/{project_id}/instances/schedule-task/{task_id}/cancel 表1 参数说明 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 task_id 是 String 任务ID。
  • URI POST https://{Endpoint}/v3.5/{project_id}/instances/{instance_id}/disaster-recovery/failover 表1 参数说明 名称 是否必选 说明 project_id 是 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 实例ID。
  • 请求示例 POST https://gaussdb-opengauss.cn-north-1.myhuaweicloud.com/v3.5/0483b6b16e954cb88930a360d2c4e663/instances/c04c789b6baa4b6dbcc139c5226f3a2cin14/disaster-recovery/failover { "is_support_restore": true, "disaster_type": "stream" }
  • 响应示例 查询实例引擎版本分布成功。 { "engine_instance_details": [ { "engine_version": "3.220.0", "instances": [ { "status": "normal", "type": "centralization_standard", "solution": "single", "instance_id": "0fd6cb8f0ffe4bba9e98af6f4b403ae8in14", "instance_name": "gauss-472e", "hotfix_versions": "" }, { "status": "normal", "type": "centralization_standard", "solution": "single", "instance_id": "1b5022523d1749abbf2c7a1307cf4378in14", "instance_name": "gauss-2ea0", "hotfix_versions": "3.220.0.11" }, { "status": "normal", "type": "centralization_standard", "solution": "triset", "instance_id": "da46dcee6c414a2eae89203804103981in14", "instance_name": "gauss-515d", "hotfix_versions": "3.220.0.11" } ] }, { "engine_version": "8.102.0", "instances": [ { "status": "normal", "type": "distributed", "solution": "hcs2", "instance_id": "a731423300c14a8c866b2f96243ee9cbin14", "instance_name": "gauss-c704", "hotfix_versions": "" } ] } ], "total_count": 2 }
  • URI GET https://{Endpoint}/v3/{project_id}/datastore/instances 表1 参数说明 名称 是否必选 参数类型 说明 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 limit 否 Integer 查询记录数。默认为100,不能为负数,最小值为1,最大值为100。例如该参数设定为10,则查询结果最多只显示10条记录。 offset 否 Integer 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数。例如:该参数指定为1,limit指定为10,则只展示第2-11条数据。
  • 响应参数 表2 要素说明 名称 参数类型 说明 engine_instance_details Array of 表3 InstanceEngineDetail说明 objects 实例引擎详情。 total_count integer 总记录数。 表3 InstanceEngineDetail说明 名称 参数类型 说明 engine_version String 引擎版本号。 instances Array of 表4 InstanceDetail说明 objects 实例详情。 表4 InstanceDetail说明 名称 参数类型 说明 instance_id String 实例ID。 instance_name String 实例名称。 status String 实例状态。 type String 实例类型。 solution String 实例部署形态。 hotfix_versions String 已升级热补丁版本。
  • 使用限制 单账号跟踪的事件可以通过 云审计 控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的 CTS /system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到 对象存储服务 (OBS)或 云日志 服务(LTS),才可在OBS桶或LTS日志组里面查看历史事件信息。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。 CTS新版事件列表不显示数据类审计事件,您需要在旧版事件列表查看数据类审计事件。 云审计控制台对用户的操作事件日志保留7天,过期自动删除,不支持人工删除。
  • 新建MySQL到 MRS Hive迁移作业 正式业务流程中,需要将MySQL中的原始样例数据需要导入MRS Hive中,并标准化为点数据集和边数据集。 在 DataArts Studio 数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图21 表/文件迁移 按照如下步骤将MySQL中的4张原始数据表,依次迁移到MRS Hive中。 配置作业vertex_user_rds2hive。 源端的“表名”选择在新建OBS到MySQL迁移作业中迁移到MySQL的vertex_user,目的端的“表名”选择在创建MRS Hive标准数据表中创建的vertex_user表。其他参数配置如图所示,无需配置高级属性,然后单击“下一步”。 图22 vertex_user_rds2hive作业基础配置 在字段映射中,根据GES图数据的要求,此处需要新增字段label,作为图文件的标签。 vertex_user:label取值为user,并将此字段调整至第2列。 vertex_movie:label取值为movie,并将此字段调整至第2列。 edge_friends:label取值为friends,并将此字段调整至第3列。 edge_rate:label取值为rate,并将此字段调整至第3列。 将原始数据结构根据GES图导入的要求标准化。则点表vertex_user和vertex_movie需要在第二列补充标签label,边表edge_rate和edge_friends需要在第三列补充标签label。 点数据集和边数据集应符合GES图数据格式要求。图数据格式要求简要介绍如下,详情可参见一般图数据格式。 点数据集罗列了各个点的数据信息。一行为一个点的数据。格式如下所示,id是点数据的唯一标识。 id,label,property 1,property 2,property 3,… 边数据集罗列了各个边的数据信息,一行为一条边的数据。GES中图规格是以边的数量进行定义的,如一百万边。格式如下所示,id 1、id 2是一条边的两个端点的id。 id 1, id 2, label, property 1, property 2, … 图23 vertex_user_rds2hive新增字段映射 调整字段顺序,点文件中将label调整至第2列,边文件将label调整至第3列。调整完成后如图25所示,然后单击下一步。 图24 vertex_user_rds2hive调整字段顺序 图25 vertex_user_rds2hive字段映射 任务配置无需修改,直接保存并运行即可。 图26 任务配置 等待作业运行完成后,如果作业成功,则vertex_user表已成功迁移到MRS Hive中。 图27 vertex_user_rds2hive作业运行成功 参考2到4,完成vertex_movie_rds2hive、edge_friends_rds2hive和edge_rate_rds2hive作业的创建,将4张原始表从MySQL标准化到MRS Hive中。
  • 新建MySQL到OBS迁移作业 正式业务流程中,需要将MySQL中的原始样例数据需要导入OBS中,并标准化为点数据集和边数据集。 在DataArts Studio数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图13 表/文件迁移 按照如下步骤将MySQL中的4张原始数据表,依次迁移到OBS桶中。 配置作业vertex_user_rds2obs。 源端的“表名”选择在新建OBS到MySQL迁移作业中迁移到MySQL的vertex_user。目的端的“写入目录”注意选择非原始数据所在目录以避免文件覆盖,“文件格式”按照GES图导入格式要求设置为“ CS V格式”,由于表中有中文字符还需额外配置高级属性“编码类型”为“GBK”。 注意:目的端高级属性需要额外配置“自定义文件名”,取值为“${tableName}”。如果不配置,则迁移到OBS的CSV文件名会带上时间戳等额外字段,导致每次运行迁移作业获取的文件名不一致,无法每次迁移后自动导入GES图数据。 其他高级属性无需配置,单击“下一步”。 图14 vertex_user_rds2obs作业基础配置 图15 vertex_user_rds2obs作业高级配置 在字段映射中,根据GES图数据的要求,此处需要新增字段label,作为图文件的标签。 vertex_user:label取值为user,并将此字段调整至第2列。 vertex_movie:label取值为movie,并将此字段调整至第2列。 edge_friends:label取值为friends,并将此字段调整至第3列。 edge_rate:label取值为rate,并将此字段调整至第3列。 将原始数据结构根据GES图导入的要求标准化。则点表vertex_user和vertex_movie需要在第二列补充标签label,边表edge_rate和edge_friends需要在第三列补充标签label。 点数据集和边数据集应符合GES图数据格式要求。图数据格式要求简要介绍如下,详情可参见一般图数据格式。 点数据集罗列了各个点的数据信息。一行为一个点的数据。格式如下所示,id是点数据的唯一标识。 id,label,property 1,property 2,property 3,… 边数据集罗列了各个边的数据信息,一行为一条边的数据。GES中图规格是以边的数量进行定义的,如一百万边。格式如下所示,id 1、id 2是一条边的两个端点的id。 id 1, id 2, label, property 1, property 2, … 图16 vertex_user_rds2obs新增字段映射 调整字段顺序,点数据集将label调整至第2列,边数据集将label调整至第3列。调整完成后如图18所示,然后单击下一步。 图17 vertex_user_rds2obs调整字段顺序 图18 vertex_user_rds2obs字段映射 任务配置无需修改,直接保存并运行即可。 图19 任务配置 等待作业运行完成后,如果作业成功,则vertex_user.csv表已成功写入到OBS桶中。 图20 vertex_user_rds2obs作业运行成功 参考2到4,完成vertex_movie_rds2obs、edge_friends_rds2obs和edge_rate_rds2obs作业的创建,将4张原始表从MySQL标准化到OBS桶中。
  • 新建OBS到MySQL迁移作业 为方便演示,需要将OBS中的CSV格式的样例数据导入到MySQL数据库中。 在DataArts Studio数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图8 表/文件迁移 按照如下步骤将数据源准备中的4张原始数据表,依次从OBS迁移到MySQL数据库中。 配置作业vertex_user_obs2rds。 源端的“源目录或文件”选择在数据源准备中上传到OBS的vertex_user.csv,由于表中有中文字符还需额外配置高级属性“编码类型”为“GBK”。目的端的“表名”选择在创建MySQL原始数据表中创建的vertex_user表。然后单击“下一步”。 图9 vertex_user_obs2rds作业配置 在字段映射中,检查字段映射顺序是否正确。如果字段映射顺序正确,单击下一步即可。 图10 vertex_user_obs2rds字段映射 任务配置无需修改,直接保存并运行即可。 图11 任务配置 等待作业运行完成后,如果作业成功,则vertex_user表已成功迁移到MySQL数据库中。 图12 vertex_user_obs2rds作业运行成功 参考2到4,完成vertex_movie_obs2rds、edge_friends_obs2rds和edge_rate_obs2rds作业的创建,将4张原始表从OBS迁移到MySQL中。
  • 表达式转换 使用JSP表达式语言(Expression Language)对当前字段或整行数据进行转换。JSP表达式语言可以用来创建算术和逻辑表达式。在表达式内可以使用整型数,浮点数,字符串,常量true、false和null。 数据进行转换过程中,替换内容包含特殊字符时,需要先使用\将该字符转义成普通字符。 表达式支持以下两个环境变量: value:当前字段值。 row:当前行,数组类型。 表达式支持的工具类用法罗列如下,未列出即表示不支持: 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”。 表达式:StringUtils.lowerCase(value) 将当前字段的字符串全部转为大写。 表达式:StringUtils.upperCase(value) 如果想将第1个日期字段格式从“2018-01-05 15:15:05”转换为“20180105”。 表达式:DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd") 如果想将时间戳转换成“yyyy-MM-dd hh:mm:ss”格式的日期字符串的类型,例如字段值为“1701312046588”,转换后为“2023-11-30 10:40:46”。 表达式:DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss") 如果想将“yyyy-MM-dd hh:mm:ss”格式的日期字符串转换成时间戳的类型。 表达式:DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss")) 如果当前字段值为“yyyy-MM-dd”格式的日期字符串,需要截取年,例如字段值为“2017-12-01”,转换后为“2017”。 表达式:StringUtils.substringBefore(value,"-") 如果当前字段值为数值类型,转换后值为当前值的两倍。 表达式:value*2 如果当前字段值为“true”,转换后为“Y”,其它值则转换后为“N”。 表达式:value=="true"?"Y":"N" 如果当前字段值为字符串类型,当为空时,转换为“Default”,否则不转换。 表达式:empty value? "Default":value 如果想将日期字段格式从“2018/01/05 15:15:05”转换为“2018-01-05 15:15:05”。 表达式:DateUtils.format(DateUtils.parseDate(value,"yyyy/MM/dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss") 获取一个36位的UUID(Universally Unique Identifier,通用唯一识别码)。 表达式:CommonUtils.randomUUID() 如果当前字段值为字符串类型,将首字母转换为大写,例如将“cat”转换为“Cat”。 表达式:StringUtils.capitalize(value) 如果当前字段值为字符串类型,将首字母转换为小写,例如将“Cat”转换为“cat”。 表达式:StringUtils.uncapitalize(value) 如果当前字段值为字符串类型,使用空格填充为指定长度,并且将字符串居中,当字符串长度不小于指定长度时不转换,例如将“ab”转换为长度为4的“ab”。 表达式:StringUtils.center(value,4) 删除字符串末尾的一个换行符(包括“\n”、“\r”或者“\r\n”),例如将“abc\r\n\r\n”转换为“abc\r\n”。 表达式:StringUtils.chomp(value) 如果字符串中包含指定的字符串,则返回布尔值true,否则返回false。例如“abc”中包含“a”,则返回true。 表达式:StringUtils.contains(value,"a") 如果字符串中包含指定字符串的任一字符,则返回布尔值true,否则返回false。例如“zzabyycdxx”中包含“z”或“a”任意一个,则返回true。 表达式:StringUtils.containsAny(value,"za") 如果字符串中不包含指定的所有字符,则返回布尔值true,包含任意一个字符则返回false。例如“abz”中包含“xyz”里的任意一个字符,则返回false。 表达式:StringUtils.containsNone(value,"xyz") 如果当前字符串只包含指定字符串中的字符,则返回布尔值true,包含任意一个其它字符则返回false。例如“abab”只包含“abc”中的字符,则返回true。 表达式:StringUtils.containsOnly(value,"abc") 如果字符串为空或null,则转换为指定的字符串,否则不转换。例如将空字符转换为null。 表达式:StringUtils.defaultIfEmpty(value,null) 如果字符串以指定的后缀结尾(包括大小写),则返回布尔值true,否则返回false。例如“abcdef”后缀不为null,则返回false。 表达式:StringUtils.endsWith(value,null) 如果字符串和指定的字符串完全一样(包括大小写),则返回布尔值true,否则返回false。例如比较字符串“abc”和“ABC”,则返回false。 表达式:StringUtils.equals(value,"ABC") 从字符串中获取指定字符串的第一个索引,没有则返回整数-1。例如从“aabaabaa”中获取“ab”的第一个索引1。 表达式:StringUtils.indexOf(value,"ab") 从字符串中获取指定字符串的最后一个索引,没有则返回整数-1。例如从“aFkyk”中获取“k”的最后一个索引4。 表达式:StringUtils.lastIndexOf(value,"k") 从字符串中指定的位置往后查找,获取指定字符串的第一个索引,没有则转换为“-1”。例如“aabaabaa”中索引3的后面,第一个“b”的索引是5。 表达式:StringUtils.indexOf(value,"b",3) 从字符串获取指定字符串中任一字符的第一个索引,没有则返回整数-1。例如从“zzabyycdxx”中获取“z”或“a”的第一个索引0。 表达式:StringUtils.indexOfAny(value,"za") 如果字符串仅包含Unicode字符,返回布尔值true,否则返回false。例如“ab2c”中包含非Unicode字符,返回false。 表达式:StringUtils.isAlpha(value) 如果字符串仅包含Unicode字符或数字,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumeric(value) 如果字符串仅包含Unicode字符、数字或空格,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumericSpace(value) 如果字符串仅包含Unicode字符或空格,返回布尔值true,否则返回false。例如“ab2c”中包含Unicode字符和数字,返回false。 表达式:StringUtils.isAlphaSpace(value) 如果字符串仅包含ASCII可打印字符,返回布尔值true,否则返回false。例如“!ab-c~”返回true。 表达式:StringUtils.isAsciiPrintable(value) 如果字符串为空或null,返回布尔值true,否则返回false。 表达式:StringUtils.isEmpty(value) 如果字符串中仅包含Unicode数字,返回布尔值true,否则返回false。 表达式:StringUtils.isNumeric(value) 获取字符串最左端的指定长度的字符,例如获取“abc”最左端的2位字符“ab”。 表达式:StringUtils.left(value,2) 获取字符串最右端的指定长度的字符,例如获取“abc”最右端的2位字符“bc”。 表达式:StringUtils.right(value,2) 将指定字符串拼接至当前字符串的左侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”左侧,拼接后长度为8,则转换后为“yzyzybat”。 表达式:StringUtils.leftPad(value,8,"yz") 将指定字符串拼接至当前字符串的右侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”右侧,拼接后长度为8,则转换后为“batyzyzy”。 表达式:StringUtils.rightPad(value,8,"yz") 如果当前字段为字符串类型,获取当前字符串的长度,如果该字符串为null,则返回0。 表达式:StringUtils.length(value) 如果当前字段为字符串类型,删除其中所有的指定字符串,例如从“queued”中删除“ue”,转换后为“qd”。 表达式:StringUtils.remove(value,"ue") 如果当前字段为字符串类型,移除当前字段末尾指定的子字符串。指定的子字符串若不在当前字段的末尾,则不转换,例如移除当前字段“www.domain.com”后的“.com”。 表达式:StringUtils.removeEnd(value,".com") 如果当前字段为字符串类型,移除当前字段开头指定的子字符串。指定的子字符串若不在当前字段的开头,则不转换,例如移除当前字段“www.domain.com”前的“www.”。 表达式:StringUtils.removeStart(value,"www.") 如果当前字段为字符串类型,替换当前字段中所有的指定字符串,例如将“aba”中的“a”用“z”替换,转换后为“zbz”。 表达式:StringUtils.replace(value,"a","z") 替换内容包含特殊字符时,需要先把该字符转义成普通字符,例如,客户想通过该表达式把字符串中 \t 去掉时,需要配置为: StringUtils.replace(value,"\\t","")(即把 \ 再次转义)。 如果当前字段为字符串类型,一次替换字符串中的多个字符,例如将字符串“hello”中的“h”用“j”替换,“o”用“y”替换,转换后为“jelly”。 表达式:StringUtils.replaceChars(value,"ho","jy") 如果字符串以指定的前缀开头(区分大小写),则返回布尔值true,否则返回false,例如当前字符串“abcdef”以“abc”开头,则返回true。 表达式:StringUtils.startsWith(value,"abc") 如果当前字段为字符串类型,去除字段中首、尾处所有指定的字符,例如去除“abcyx”中首尾所有的“x”、“y”、“z”和“b”,转换后为“abc”。 表达式:StringUtils.strip(value,"xyzb") 如果当前字段为字符串类型,去除字段末尾所有指定的字符,例如去除当前字段末尾的“abc”字符串。 表达式:StringUtils.stripEnd(value,"abc") 如果当前字段为字符串类型,去除字段开头所有指定的字符,例如去除当前字段开头的所有空格。 表达式:StringUtils.stripStart(value,null) 如果当前字段为字符串类型,获取字符串指定位置后(索引从0开始,包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”索引为2的字符(即c)及之后的字符串,则转换后为“cde”。 表达式:StringUtils.substring(value,2) 如果当前字段为字符串类型,获取字符串指定区间(索引从0开始,区间起点包括指定位置的字符,区间终点不包含指定位置的字符)的子字符串,区间位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后、第4个字符(即e)之前的字符串,则转换后为“cd”。 表达式:StringUtils.substring(value,2,4) 如果当前字段为字符串类型,获取当前字段里第一个指定字符后的子字符串。例如获取“abcba”中第一个“b”之后的子字符串,转换后为“cba”。 表达式:StringUtils.substringAfter(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符后的子字符串。例如获取“abcba”中最后一个“b”之后的子字符串,转换后为“a”。 表达式:StringUtils.substringAfterLast(value,"b") 如果当前字段为字符串类型,获取当前字段里第一个指定字符前的子字符串。例如获取“abcba”中第一个“b”之前的子字符串,转换后为“a”。 表达式:StringUtils.substringBefore(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符前的子字符串。例如获取“abcba”中最后一个“b”之前的子字符串,转换后为“abc”。 表达式:StringUtils.substringBeforeLast(value,"b") 如果当前字段为字符串类型,获取嵌套在指定字符串之间的子字符串,没有匹配的则返回null。例如获取“tagabctag”中“tag”之间的子字符串,转换后为“abc”。 表达式:StringUtils.substringBetween(value,"tag") 如果当前字段为字符串类型,删除当前字符串两端的控制字符(char≤32),例如删除字符串前后的空格。 表达式:StringUtils.trim(value) 将当前字符串转换为字节,如果转换失败,则返回0。 表达式:NumberUtils.toByte(value) 将当前字符串转换为字节,如果转换失败,则返回指定值,例如指定值配置为1。 表达式:NumberUtils.toByte(value,1) 将当前字符串转换为Double数值,如果转换失败,则返回0.0d。 表达式:NumberUtils.toDouble(value) 将当前字符串转换为Double数值,如果转换失败,则返回指定值,例如指定值配置为1.1d。 表达式:NumberUtils.toDouble(value,1.1d) 将当前字符串转换为Float数值,如果转换失败,则返回0.0f。 表达式:NumberUtils.toFloat(value) 将当前字符串转换为Float数值,如果转换失败,则返回指定值,例如配置指定值为1.1f。 表达式:NumberUtils.toFloat(value,1.1f) 将当前字符串转换为Int数值,如果转换失败,则返回0。 表达式:NumberUtils.toInt(value) 将当前字符串转换为Int数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toInt(value,1) 将字符串转换为Long数值,如果转换失败,则返回0。 表达式:NumberUtils.toLong(value) 将当前字符串转换为Long数值,如果转换失败,则返回指定值,例如配置指定值为1L。 表达式:NumberUtils.toLong(value,1L) 将字符串转换为Short数值,如果转换失败,则返回0。 表达式:NumberUtils.toShort(value) 将当前字符串转换为Short数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toShort(value,1) 将当前IP字符串转换为Long数值,例如将“10.78.124.0”转换为Long数值是“172915712”。 表达式:CommonUtils.ipToLong(value) 从网络读取一个IP与物理地址映射文件,并存放到Map集合,这里的URL是IP与地址映射文件存放地址,例如“http://10.114.205.45:21203/sqoop/IpList.csv”。 表达式:HttpsUtils.downloadMap("url") 将IP与地址映射对象缓存起来并指定一个key值用于检索,例如“ipList”。 表达式:CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url")) 取出缓存的IP与地址映射对象。 表达式:CommonUtils.getCache("ipList") 判断是否有IP与地址映射缓存。 表达式:CommonUtils.cacheExists("ipList") 根据IP取出对应的详细地址:国家_省份_城市_运营商,例如“1xx.78.124.0”对应的地址为“中国_广东_深圳_电信”,取不到对应地址则默认“**_**_**_**”。如果需要,可通过StringUtil类表达式对地址进行进一步拆分。 表达式:CommonUtils.getMapValue(CommonUtils.ipToLong(value),CommonUtils.cacheExists("ipLis")?CommonUtils.getCache("ipLis"):CommonUtils.setCache("ipLis",HttpsUtils.downloadMap("url"))) 根据指定的偏移类型(month/day/hour/minute/second)及偏移量(正数表示增加,负数表示减少),将指定格式的时间转换为一个新时间,例如将“2019-05-21 12:00:00”增加8个小时。 表达式:DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8) 如果value值为空或者null时,则返回字符串“aaa”,否则返回value。 表达式:StringUtils.defaultIfEmpty(value,"aaa")
  • 约束限制 作业源端开启“使用SQL语句”参数时不支持配置转换器。 如果在字段映射界面, CDM 通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、MRS Hudi及 DLI 做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有配置字段转换器这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 创建表达式转换器时,表达式的功能是对该字段的数据进行处理,故不建议使用时间宏,如需使用,请根据以下场景处理(源端是文件类的配置时仅支持方式一): 方式一:新建表达式转换器时,表达式需要用''包围。 ${dateformat(yyyy-MM-dd)}不加引号使用时,解析成2017-10-16之后还会进行运算,将'-'识别为减号,导致结果为1991,须使用'${dateformat(yyyy-MM-dd)}',即'2017-10-16'。 图2 使用''包围表达式 方式二:源字段中新增自定义字段,在样值中填写时间宏变量,重新进行字段映射处理。 图3 源字段新增自定义字段 如果是导入到 数据仓库 服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。
  • 天依赖天 规则:按自然天内的实例进行依赖,不会跨天向前推找依赖实例。在同自然天内A依赖B ,无论A、B设置在什么时间点执行,A永远在B之后执行。 天区间为[00:00:00,23:59:59] 举例1:A依赖B,A在2:00执行,B在3:00执行,A会等B在3:00执行完成后执行。 图12 天依赖天举例一 举例2:A依赖B,A在5:00执行,B在3:00执行,A在B执行完成后,在5:00执行。 图13 天依赖天举例二
  • 月依赖周 规则:依赖自然天,月作业依赖当天的周作业。如果周作业在当天未执行,月作业直接执行。如果周作业在当天执行,月作业会等待周作业执行完成后,再开始执行。 举例1:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,B作业当天非周三,未执行,A作业则直接执行。 举例2:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,B作业当天正好是周三,则A作业等待B作业执行完成后开始执行。
  • 小时依赖分钟 规则:小时作业依赖分钟作业,往前推到上一个自然小时范围内的分钟级实例,最后一个分钟级实例运行完成后再开始运行小时作业。区间是前开后闭(2:00,3:00]。 举例1:A依赖B,A为小时作业,每个小时0分执行,B为分钟作业,每15分钟执行一次;B执行完后执行A。A作业依赖自然小时范围内B作业实例的最后一个实例,执行的A任务会依赖3:00运行完的B作业实例。 图6 小时依赖分钟举例一 如果小时作业依赖的分钟区间范围是(1:50,2:50],则小时作业是2点50执行,依赖的是分钟作业在2点50的作业实例。 如果在配置作业依赖关系时勾选“最近”依赖的按钮,小时作业只依赖所选作业最近的一个运行实例,比如A在3:00开始调度,A依赖B最近的2:45调度的一个运行实例。 如果作业A在零点进行调度,所依赖作业B可以是昨天的分钟任务。
  • 天依赖小时 规则:按自然天,天周期作业实例依赖一天内所有小时作业的实例。A为天作业,依赖B小时作业,A依赖所有B在自然天内的实例,A会在最后一个B小时作业实例执行完成后执行。 举例:A依赖B,A配置的调度时间为每天17点执行一次,B从0点开始,每5个小时执行一次,那么A实际执行时间为JobB在20点的实例运行完之后开始运行。 图11 天依赖小时 如果在配置作业依赖关系时勾选“最近”依赖的按钮,天作业只依赖所选作业最近的一个运行实例,比如A在每天17点开始调度,A依赖B最近的15:00调度的一个运行实例。
  • 天依赖周 规则:依赖自然天,天作业依赖当天的周作业。如果周作业在当天未执行,天作业直接执行。如果周作业在当天执行,天作业会等待周作业执行完成后,再开始执行。 举例1:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,B作业当天非周三,未执行,A作业则直接执行。 举例2:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,B作业正好当天是周三,会执行,则A作业等待B作业执行完成后,开始执行。
  • 月依赖月 规则:依赖自然天,月作业依赖当天的月作业。被依赖的月作业如果在依赖作业之后执行,则依赖作业不会阻塞,正常执行。除此之外均会按照依赖关系去执行。 举例1:A依赖B,A作业每月1号执行,B作业每月2号执行,A作业1号正常执行,B作业不阻塞A作业执行。 举例2:A依赖B,A作业和B作业都是2号执行,A作业会依赖B作业执行完成后的作业实例。 举例3:A依赖B,A作业每月3号执行,B作业每月2号执行,3号A作业依赖2号B作业。
  • 天依赖分钟 规则:按自然天,天周期作业实例依赖一天内所有分钟级作业的实例。 举例:A依赖B,A为天作业,每天22点调度,依赖B分钟作业,每30分钟调度一次,A依赖所有B在自然天内的实例, A会在最后一个B作业实例执行完成后执行。 图10 天依赖分钟 如果在配置作业依赖关系时勾选“最近”依赖的按钮,天作业只依赖所选作业最近的一个运行实例,比如A在每天22点开始调度,A依赖B最近的21:30调度的一个运行实例。
  • 分钟依赖分钟 规则:分钟是最小调度粒度,没有自然分钟周期的概念,依赖策略是往前推一个调度周期找依赖实例。 举例1:A依赖B,为同周期分钟作业,在同一时间点,B执行完后开始执行A。 图2 分钟依赖分钟举例一 举例2:A依赖B,A为15分钟周期,B为10分钟周期,A往前推15分钟(包括当前启动整点),依赖范围内的B实例,在2:15分执行A任务依赖1个B实例(2:10分),2:30执行的A任务依赖两个B实例(2:20和2:30)。它的边界范围为(0分,15分],前开后闭区间。 图3 分钟依赖分钟举例二
共100000条
提示

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