华为云用户手册

  • 配置并行处理算子 并行处理算子可以同时执行多个分支逻辑,分支间互不影响。 表1 并行处理算子 参数 说明 失败策略 当并行分支中存在失败情况时,配置API工作流的失败策略。 任一分支失败则终止:表示当并行分支中存在失败情况时,则此API工作流置为失败状态,不再继续执行。 分支失败继续执行:表示当并行分支中存在失败情况时,继续执行其他分支和后续算子。当所有分支均失败导致后续算子无法执行时,则此API工作流置为失败状态。 分支1 超时时间(ms) 表示当前分支执行超过配置的超时时间后,则将此分支置为失败状态。默认为0无时间限制。 分支2 超时时间(ms) 表示当前分支执行超过配置的超时时间后,则将此分支置为失败状态。默认为0无时间限制。 ... 分支n 超时时间(ms) 表示当前分支执行超过配置的超时时间后,则将此分支置为失败状态。默认为0无时间限制。 父主题: 编排API
  • 算子和工作流简介 在API工作流编排页面,您可以自由拖拽各类算子到画布中,然后基于特定的业务逻辑和流程通过连线编排工作流,最后配置算子,完成后即可保存、调试及发布工作流。 API编排支持五类可拖拽的算子,分别为:入口API、普通API、条件分支、并行处理和输出处理。其中,入口API位于最上游,输出处理位于最下游,中间部分可以是普通API、条件分支和并行处理这三类算子的任意组合。注意,编排工作流时需要满足如下要求: 有且只有一个入口API算子,并位于最上游,向下只能有一个分支。 至少有一个普通API算子,并位于中间层,上下游均有其他算子,向下只能有一个分支。 条件分支算子可选,位于中间层,必须至少有2个分支,最多支持20个分支,多个分支满足条件时仅执行第一个满足条件的分支。 注意,条件分支的直接下游不能为输出处理算子,只能获取上级算子请求参数或结果集进行条件判断。 并行处理算子可选,位于中间层,必须至少有2个分支,最多支持20个分支,必须配置失败策略。 注意,并行处理的直接下游不能为输出处理算子,只能支持同时执行多个分支逻辑,分支间互不影响。 有且只有一个输出处理算子,并位于最下游,直接上游必须为普通API算子,必须配置至少一个结果映射。 API工作流不能有环状结构,不能有孤立算子,最多支持20层深度。 图1 API工作流编排页面 表1 API工作流算子介绍 配置入口 算子 是否必选 介绍 触发器 入口API 必选 入口API算子是API工作流的入口,工作流发布后可通过调用入口API来调用API工作流。在入口API算子内需定义API工作流的名称、URL、参数协议、请求方式、审核人、安全认证以及请求参数。 入口API算子的配置方法,详见配置入口API算子。 API目录 普通API 必选 普通API是执行数据查询操作的算子。普通API即已创建的数据API,编排API时您可以从API目录内拖拽一个普通API作为执行算子进行取数,并将请求参数或结果集作为变量传递下去。 普通API可参考配置方式生成API或脚本/MyBatis方式生成API进行创建。 逻辑控制器 条件分支 非必选 条件分支算子通过获取上游算子的请求参数或结果集进行条件判断,根据定义的表达式来确定下一步执行的分支。注意,多个分支满足条件时仅执行第一个满足条件的分支。 条件分支算子和表达式的配置方法,详见配置条件分支算子。 并行处理 非必选 并行处理算子可以同时执行多个分支逻辑,分支间互不影响。 并行处理算子的配置方法,详见配置并行处理算子。 输出处理 必选 输出处理算子负责对API工作流的执行结果进行错误码映射、结果集映射和格式转换,以确定最终返回的数据格式。 输出处理算子的配置方法,详见配置输出处理算子。
  • 删除API 在 DataArts Studio 控制台首页,选择对应工作空间的“数据服务”模块,进入数据服务页面。 在左侧导航栏选择服务版本(例如:专享版),进入总览页。 在左侧选择“API目录”,进入API列表页,勾选需要删除的API,单击“删除”。 只有未发布状态(如已创建、已下线)的API可以删除,已停用或发布状态不可删除。 批量删除API最多同时删除1000个API。 单击“确定”,完成API删除。
  • API返回数据规格 数据服务适用于小批量数据的快速响应交互场景,不适用于将大量数据通过API的方式返回。当前通过数据服务API返回数据的规格如下表所示。 表5 API的返回数据条数限制 API分类 使用场景 数据源 默认规格(条) 配置类API 调试API DLI /MySQL/RDS/DWS 10 调用API DLI/MySQL/RDS/DWS 100 脚本类API 测试SQL - 10 调试API DLI 默认分页:100 自定义分页:1000 MySQL/RDS/DWS 默认分页:10 自定义分页:2000 调用API DLI 默认分页:100 自定义分页:1000 MySQL/RDS/DWS 默认分页:10 自定义分页:2000
  • 共享版与专享版对比 数据服务当前提供共享版与专享版两种服务方式。其中共享版数据服务即开即用但仅限于存量用户调测使用,专享版数据服务需要购买专享版集群增量包并在集群中管理API。 数据服务共享版当前仅限于华东-上海一、华北-北京四、华南-广州的存量用户调测使用,受限于服务稳定性和生命周期策略,不建议用于生产环境。 专享版数据服务常用于企业内部系统解耦,各服务部署在云上的VPC内,服务之间以RESTful API方式通信,通信链路在VPC内部进行,网络安全得到进一步保障。同时专享版实例支持前端或后端服务部署在公有网络,通过绑定弹性公网IP实现网络交互。 表1 共享版与专享版数据服务差异 差异项 共享版 专享版 计费 - 根据集群规格按包年包月计费。 按照API使用额度计费:每个工作空间具有10个API免费试用额度,超过试用配额每天每个API按1元收费。 网络访问 公网访问。 实例运行在虚拟私有云(VPC)中,在VPC内,使用实例子网地址调用API。 可通过开启公网入口与出口访问,允许外部服务调用API,及后端部署在外部网络环境中。 云市场售卖 API可在云市场公开售卖。 不支持将API上架到云市场公开售卖。 使用对象 小型用户。 物理隔离要求较低,能够开箱即用,快速实现API能力开放。 中大型用户。 专享版数据服务拥有物理隔离的独立集群, 更丰富的特性。 满足内部API调用跟API开放,独立的出、入网带宽选择。 数据服务的共享版与专享版在功能上的异同点如下表所示。 表2 共享版与专享版数据服务功能差异 规格分类 规格描述 共享版 专享版 基本功能 精细化流控策略 30个 500个 IP&用户访问控制 √ √ 安全认证 √ √ API生命周期管理 √ √ 自定义 域名 √ √ Excel导入导出 √ √ 支持VPC通道 √ √ API参数编排-配置方式 √ √ API参数编排-脚本方式 √ √ API参数编排-MyBatis方式 × √ API编排 × √ 注册现有API √ × 应用管理绑定API × √ 返回总条数 × √ API分组变量管理 √ √ 高级功能 自定义认证 √ √ 创建应用 50个 1000个 支持对接API云市场 √ × 支持协议 HTTP或HTTPS HTTPS 支持API策略路由 √ √ 运维分析展示 √ √ 支持后端负载均衡 × √ 支持内部API管理 × √ 后端支持对接私有云 × √ 支持对接专线服务 × √ 性能指标 独立物理多租集群 × √ 出、入网带宽独立 × √ 推荐每秒请求次数 200TPS 8000-30000TPS
  • 共享版规格 数据服务共享版无具体的规格指标,在表3中给出了用户创建和使用API的相关配额说明。 如果您需要修改默认限制值,请参考如何申请扩大配额。 表3 数据服务使用限制明细 限制项 默认限制 能否修改 API分组数量 每个用户最多创建50个API分组。 √ API数量 每个用户最多创建200个API。 √ 后端策略数量 每个用户最多创建5个后端策略。 √ 应用数量 每个用户最多创建50个应用。应用配额包括用户自行创建的应用和API市场购买API生成的应用。 √ 流控策略数量 每个用户最多创建30个流控策略。 用户流量限制不超过API流量限制。 应用流量限制不超过用户流量限制。 源IP流量限制不超过API流量限制。 √ 访问控制策略数量 每个用户最多可以创建100个访问控制策略。 √ VPC通道数量 每个用户最多创建30个VPC通道。 √ 变量数量 每个分组在任意一个环境中,最多创建50个变量。 √ 弹性云服务器数量 每个VPC通道最多添加200个弹性云服务器。 √ 参数数量 每个API最多创建50个参数。 √ 发布历史数量 同一个API在每个环境中最多记录10条最新的发布历史。 √ 每个API的访问频率 不超过200次/秒。 √ 特殊应用 阈值不超过API流量限制值。 x 子域名访问次数 每个子域名每天最多可以访问1000次。 x 调用请求包的大小 API每次最大可以调用12M的请求包 x TLS协议 支持TLS1.1和TLS1.2,推荐使用TLS1.2。 x 实名认证 未实名认证的用户,无法进行任何的创建操作。 x
  • 操作步骤 购买数据服务专享集群增量包,系统会按照您所选规格自动创建一个数据服务专享集群。 单击已开通实例卡片上的“购买增量包”。 进入购买DataArts Studio增量包页面,参见表1进行配置。 表1 购买数据服务专享版实例参数说明 参数项 说明 增量包类型 选择数据服务专享集群增量包。 计费方式 实例收费方式,当前支持“包年包月”。 工作空间 选择需要使用数据服务专享集群增量包的工作空间。例如需要在DataArts Studio实例的工作空间A中使用数据服务专享版,则此处工作空间应选择为A。集群购买成功后,即可通过在工作空间A查看到创建好的数据服务专享集群。 如果需要在其他工作空间内使用该集群,您可以在集群创建成功后,参考管理集群共享将该集群共享给其他工作空间。 可用区 选择数据服务专享集群所在的可用区。 支持单AZ和多AZ两种部署方式。推荐使用多AZ方式。 单AZ:仅可以选择1个AZ,集群节点部署在同一AZ上。 多AZ:可选择2-10个AZ,集群节点部署在不同AZ上,以提升集群的容灾能力。 详情请参见什么是可用区。 集群名称 集群名称必须以字母开头,可以包含字母、数字、中划线或者下划线,不能包含其他的特殊字符。输入长度不能小于5个字符。 集群描述 可以自定义对当前数据服务专享版集群的描述。 版本 当前数据服务专享版的集群版本。 集群规格 不同实例规格,对API数量的支持能力不同。 公网入口 开启“公网入口”,创建集群时会为集群自动绑定一个新建的弹性公网IP,后续可以通过此公网IP地址调用专享版API。该功能新建的弹性公网IP不会计入收费项。 如果您存在需要本地调用或跨网调用API的使用场景,建议开启。如果在创建集群时未开启公网入口,后续则不再支持绑定EIP。 带宽大小 可配置公网带宽范围。 虚拟私有云 DataArts Studio实例中的数据服务专享版集群所属的VPC、子网、安全组。 在相同VPC、子网、安全组中的云服务资源(如E CS ),可以使用数据服务专享版实例的私有地址调用API。建议将专享版集群和您的其他关联业务配置一个相同的VPC、子网、安全组,确保网络安全的同时,方便网络配置。 VPC、子网、安全组的详细操作,请参见《虚拟私有云用户指南》。 说明: 目前专享版集群创建完成后不支持切换VPC、子网、安全组,请谨慎选择。 如果开启公网入口,安全组入方向需要放开80(HTTP)和443(HTTPS)端口的访问权限。 此处支持选择共享VPC子网,即由VPC的所有者将VPC内的子网共享给当前账号,由当前账号在购买数据服务专享版集群时选择共享VPC子网。通过共享VPC子网功能,可以简化网络配置,帮助您统一配置和运维多个账号下的资源,有助于提升资源的管控效率,降低运维成本。如何共享VPC子网,请参考《共享VPC》。 子网 安全组 企业项目 DataArts Studio专享版集群关联的企业项目。企业项目管理是一种按企业项目管理云资源的方式,具体请参见企业管理用户指南。 节点数量 - 购买时长 - 单击“立即购买”,确认规格后提交。
  • 管理集群共享 专享版集群创建成功后,默认仅能在绑定的工作空间内使用。如果您需要在其他工作空间使用此集群,则可以进行集群共享,共享后在其他工作空间可查看、使用但不能管理该集群,并能将API发布至该集群。 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。 在DataArts Studio控制台首页,选择已购买专享版集群的工作空间的“数据服务”模块,进入数据服务页面。 在数据服务集群页面单击“集群”,进入集群列表页面。 单击集群名称,进入集群详情页面。 在集群详情页面,单击“共享管理”页签,进入共享管理页面。 图3 进入共享管理页面 单击“共享”,在弹出的窗口中勾选需要共享的工作空间后,单击“确定”完成集群共享。 图4 选择工作空间 对于已共享集群的工作空间,您可以在该工作空间内,正常查看、使用该集群。 如后续需要取消该工作空间的集群共享,则需要先下线该工作空间已在集群上发布的API,再到绑定工作空间的数据服务集群详情页面,取消共享。
  • 网络环境准备 如图1所示,专享版集群创建后,资源位于资源租户区,由ELB统一对集群节点进行负载均衡。 专享版集群创建后,您可以通过如下途径访问集群API: 内网地址:内网地址为用户VPC内的终端节点IP地址,默认具备。 外网地址(可选):外网地址为绑定在ELB上的EIP地址。EIP仅在创建数据服务集群时,勾选开启公网入口,才会具备。 内网域名(可选):内网域名是指在VPC中生效的域名。创建集群后可通过“绑定内网域名”,输入自定义内网域名,数据服务调用DNS服务将内网域名与内网地址相关联。 公网域名(可选):公网域名是在Internet中使用公网解析的域名。创建集群后可通过“绑定公网域名”,输入已完成注册、备案的域名,数据服务调用DNS服务将公网域名与外网地址相关联。 图1 专享版集群网络架构说明 因此,为了保证专享版集群API能够被用户访问,集群创建中需要注意如下网络配置: VPC 虚拟私有云。专享版实例需要配置虚拟私有云(VPC),在同一VPC中的资源(如ECS),可以使用专享版实例的私有地址调用API。 在购买时专享版实例时,建议配置和您其他关联业务相同VPC,确保网络安全的同时,方便网络配置。 弹性公网IP 专享版实例的API如果要允许外部调用,则需要购买一个弹性公网IP,并在购买时绑定给实例,作为实例的公网入口。 安全组 安全组类似防火墙,控制谁能访问实例的指定端口,以及控制实例的通信数据流向指定的目的地址。安全组入方向规则建议按需开放地址与端口,这样可以最大程度保护实例的网络安全。 专享版实例绑定的安全组有如下要求: 入方向:如果需要从公网调用API,或从其他安全组内资源调用API,则需要为专享版实例绑定的安全组的入方向放开80(HTTP)、443(HTTPS)两个端口。 出方向:如果后端服务部署在公网,或者其他安全组内,则需要为专享版实例绑定的安全组的出方向放开后端服务地址与API调用监听端口。 如果API的前后端服务与专享版实例绑定了相同的安全组、相同的虚拟私有云,则无需专门为专享版实例开放上述端口。 路由配置 在物理机纳管场景下,如果物理机纳管网段与集群网段不一致,需要配置路由。 进入集群“基本信息”页面,单击配置路由项的“新建”按钮,新增物理机的IP地址,如图2所示。 图2 基本信息
  • 操作步骤 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。 在DataArts Studio控制台首页,选择对应工作空间的“数据服务”模块,进入数据服务页面。 在左侧导航选择服务版本(例如:专享版),进入总览页。 单击左侧导航栏中的“审核中心”,进入相应页面后,选择“审核人管理”页签,然后单击“新建”按钮。 图1 新建审核人界面 选择审核人(此处的账户列表来自于工作空间成员),输入正确的手机号码和电子邮箱,单击“确认”完成审核人的添加。 根据需要,可以添加多个审核人。
  • 管理审核人 数据服务平台提供管理审核人的功能,您可在审核中心新建和删除审核人,下面以新建审核人为例介绍如何操作。 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。 在DataArts Studio控制台首页,选择对应工作空间的“数据服务”模块,进入数据服务页面。 在左侧导航选择服务版本(例如:专享版),进入总览页。 单击左侧导航栏中的“审核中心”,进入相应页面后,选择“审核人管理”页签,然后单击“新建”按钮。 图1 新建审核人界面 选择审核人(此处的账户列表来自于工作空间成员),输入正确的手机号码和电子邮箱,单击“确认”完成审核人的添加。 根据需要,可以添加多个审核人。
  • 操作场景 DataArts Studio数据服务的API流量控制基于指定规则对API的访问流量进行调节控制的限流策略,能够提供多种维度的后端服务保护功能。当前API流控支持通过用户、应用和时间段等不同维度限制API的调用次数。 为了提供持续稳定的服务,您需要通过创建并选择流控策略,针对部分API进行流量控制。流控策略和API本身是相互独立的,只有将流控策略绑定API后,流控策略才对绑定的API生效。 同一个环境中一个API只能被一个流控策略绑定,一个流控策略可以绑定多个API。
  • 调用API方式简介 创建API时,有三种认证方式可选,不同认证方式的API支持的调用方式也有所不同,详见表1。 表1 API认证与调用方式说明 认证方式 安全级别 授权与认证机制 支持的调用方式 调用方法示例 使用说明 (推荐)APP认证 高 通过APP应用将API授权给应用后,使用应用的密钥对(AppKey和AppSecret)进行安全认证。 (推荐)SDK调用:支持Java、Go、Python、JavaScript、C#、PHP、C++、C、Android等多种语言。 API工具调用:需要通过JavaScript SDK包中的demo.html手动生成签名后,再使用API工具调用。 (推荐)通过SDK调用APP认证方式的API 通过API工具调用APP认证方式的API 推荐使用APP认证+SDK调用方式,帮助您简单、快速地通过数据API获取到开放数据。 IAM 认证 中 通过IAM应用或白名单将API授权给账号后,借助从IAM服务获取的用户Token进行安全认证。 API工具调用:需要调用IAM服务的获取用户Token接口 获取Token ,再使用API工具调用。 通过API工具调用IAM认证方式的API API工具调用场景可使用IAM认证方式。 无认证 低 无需授权,所有用户均可访问。 API工具调用:直接调用,无需认证信息。 浏览器调用:当API入参位置在Query和Path时,支持浏览器调用。如果入参位置在Header或Body,由于无法传参因此不支持浏览器调用。 通过API工具调用无认证方式的API 通过浏览器调用无认证方式的API 无认证方式建议仅在测试接口时使用,不推荐正式使用。若调用方为不可信任用户,则存在数据库安全风险(如数据泄露、数据库高并发访问导致宕机、SQL注入等风险)。 父主题: 通过不同方式调用API
  • 配置API参数 配置API基本信息后,即可配置API参数。这里将配置API的后端服务和请求参数。 表2 API参数配置说明 配置 说明 协议 用于传输请求的协议,支持HTTP和HTTPS协议。 用于数据服务模块向待注册 API服务 传输请求。 请求方式 HTTP请求方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。用于数据服务模块向待注册API服务传输请求。 GET:请求服务器返回指定资源。 POST:请求服务器新增资源或执行特殊操作。 后端服务HOST 待注册API服务所在的Host,不能以http://或https://开头,并且不包含Path。 后端服务PATH 待注册API服务所在的Path,Path中支持参数,参数要放在{}中,如/user/{userid}。 后端超时(ms) 设置后端超时时间。 后端服务参数 请求参数位置支持Path、Header、Query,不同的请求方式所支持的可选参数位置不一样,请根据产品上提供的可选项按需选择。 常量参数 常量参数即参数值是固定的参数,对调用者不可见,API调用时不需传入常量参数,但后台服务始终接收这里定义好的常量参数及参数值。适用于当您希望把API的某个参数的取值固定为某个值以及要对调用者隐藏参数的场景。
  • 配置取数逻辑 本例中以脚本方式说明如何配置API取数逻辑。Mybatis方式与之相比差异在于参数解析形式和支持的语法差异,暂不支持测试SQL,在其他使用流程上没有区别。 如果使用Mybatis方式生成API,则需要将本章节脚本中的参数解析格式由${parameter}修改为#{parameter}形式,另外Mybatis方式支持的标签语法可在界面中单击脚本编辑处的,查看弹出的Mybatis脚本编辑提示。 “取数方式”选择“脚本方式”或“MyBatis方式”: 选择数据源、数据连接、数据库等数据信息。 数据服务仅支持部分数据源,详情请参见DataArts Studio支持的数据源。您需提前在DataArts Studio管理中心中配置好数据源,按照脚本编辑提示要求输入SQL语句。 选择分页方式,推荐使用自定义分页方式。 默认分页是指在创建API时输入了SQL,数据服务会自动基于SQL外层包装分页逻辑。 例如输入的SQL脚本为: SELECT * FROM userinfo WHERE id=${userid} 数据服务在处理调试或者调用时,将自动在用户SQL外层包装分页逻辑,从而变成以下脚本: SELECT * FROM (SELECT * FROM userinfo WHERE id=${userid}) LIMIT {limitValue} OFFSET {offsetValue} 其中limitValue表示读取的数据条数,offsetValue表示跳过的数据条数(即偏移量),系统将默认赋值。 自定义分页是指在创建API时,数据服务将不对SQL进行处理,分页逻辑需要在写SQL时由用户自定义。值得注意的是,为避免API查询数据量过大导致集群异常,自定义分页方式下必须在写SQL时添加分页逻辑。 如果已知需要读取的数据条数limitValue和需要跳过的数据条数offsetValue,则分页逻辑可以写成以下脚本: SELECT * FROM userinfo WHERE id=${userid} LIMIT {limitValue} OFFSET {offsetValue} 而在实际使用中,更多的是根据分页后的页面大小pageSize和页码pageNum定义分页逻辑,脚本样式如下: SELECT * FROM userinfo WHERE id=${userid} LIMIT {pageSize} OFFSET {pageSize*(pageNum-1)} 不同的数据源具有不同的语法风格,分页脚本应按照数据源语法要求调整。例如: DLI数据源不支持“LIMIT {limitValue} OFFSET {offsetValue}”的写法,仅支持“LIMIT {limitValue}” 。 HETU数据源分页需要反转,不支持“LIMIT {limitValue} OFFSET {offsetValue}”的写法,仅支持“OFFSET {offsetValue} LIMIT {limitValue}”。 编写API查询SQL。 在脚本编辑页面,单击脚本编辑处的,按照脚本编辑提示开发SQL查询语句。单击可将入参添加为SQL语句的API请求参数。另外,专享版数据服务支持返回总条数,开启后可返回取值脚本执行结果数据的总条数。 例如,需要在用户表中根据用户ID查询用户信息时,取值脚本可写为如下脚本。其中,“id”为userinfo表中的字段,“userid”为API中定义的入参。 SELECT * FROM userinfo WHERE id=${userid} 如果分页方式为自定义分页,页面大小pageSize为10、页码pageNum为2时,按照LIMIT {pageSize} OFFSET {pageSize*(pageNum-1)}转换方法,脚本可写为: SELECT * FROM userinfo WHERE id=${userid} LIMIT 10 OFFSET 10 图2 编写API查询SQL 脚本编辑完成后,单击脚本编辑窗口下方的“测试SQL”,填写入参值,执行验证是否能返回预期结果。如果测试失败,可在“预览SQL”页签下查看实际运行的SQL语句是否符合预期,或者通过“日志”页签查看报错信息。 图3 测试SQL MyBatis方式的API在配置取数逻辑时,暂不支持测试SQL,仅能在测试阶段或调试API时验证SQL。 SELECT查询的字段即为API返回参数,支持通过AS返回别名。 WHERE条件中的参数为API请求参数,脚本方式下参数格式为${参数名},MyBatis方式下参数格式为#{参数名}。 对于DWS数据库的FLOAT4、FLOAT8类型参数,不支持比较数值是否相等。 专享版数据服务支持返回总条数,开启后可返回取值脚本执行结果数据的总条数。 如果单个参数需要传多个值时,写法如下: 字符串:'a','b','c' 数值:1,2 字段:a,b,c 添加排序参数。 在排序参数列表中,单击“新建”可设置排序字段。 字段名称对外不可见,是所选的数据表中的字段,是API调用时实际访问的内容。在API查询SQL语句已编写完成且测试通过的前提下,可在“字段名称”输入框中选择排序字段。 变量可自定义,用于与字段名称关联。在“变量”输入框中输入参数名称(一般填写为参数名称即可),系统会自动修改为变量形式。 是否可选决定了调用API时此排序参数是否必选,勾选则表示此参数可以不传,可以通过排序参数描述pre_order_by的值配置是否参与排序;不勾选则此参数必传,即使排序参数描述pre_order_by的值未配置此参数,依然会参与排序。 排序方式表示了当前参数允许使用的排序形式,分为升序、降序以及自定义。自定义排序参数默认为升序排序,可通过排序参数描述pre_order_by的值进行调整;而升序或降序的排序参数,不支持通过pre_order_by的值调整排序方式,如果pre_order_by的值与此处设置排序方式不符,则会导致配置调试或调用报错。 多个排序参数时,表示当第一个排序参数相等时,再逐一用后续排序参数去排序。与配置方式不同的是,参数的排序顺序与添加排序字段的先后无关,而是需要通过SQL脚本自定义,并且不支持通过排序参数描述pre_order_by的值进行调整。 注意,脚本/MyBatis API的排序字段必须要使用ORDER BY添加到SQL语句中,才能使该排序参数生效,单击可将排序参数添加到SQL语句。添加ORDER BY参数时,关联字段名即可,多个排序字段的先后顺序由脚本定义,不支持在脚本中通过ASC或DESC设置顺序或降序方式。SQL语句中未添加的排序参数即使在排序参数描述pre_order_by的值中定义,排序也不会生效。 例如,需要在用户表中根据用户ID查询用户信息,先后通过age和kk两个字段排序,页面大小pageSize为10、页码pageNum为2时,脚本样例如下。 SELECT * FROM userinfo WHERE id=${userid} order by ${age},${kk} LIMIT 10 OFFSET 10 图4 添加排序参数 脚本编辑完成后,单击脚本编辑窗口下方的“测试SQL”,填写入参值和排序参数描述pre_order_by的值,执行验证是否能返回预期结果。 MyBatis方式的API在配置取数逻辑时,暂不支持测试SQL,仅能在测试阶段或调试API时验证SQL。 pre_order_by的默认值已由系统根据已配置的所有排序参数给出,自定义排序默认为升序。排序参数描述pre_order_by的值填写形式为“排序参数参数名:ASC”或“排序参数参数名:DESC”,其中ASC表示升序,DESC表示降序,多个排序参数描述以“英文分号”进行分隔。勾选“是否传值”后,测试结果将按照pre_order_by的值排序。 对于pre_order_by的值,您可以进行如下修改: 删掉某可选的排序参数,则此排序参数不再参与排序。 修改自定义排序方式的排序参数为升序或降序方式,则此排序参数按照修改后的排序方式排序。 pre_order_by的值,不支持进行如下修改,否则会修改不生效或导致调用报错。 删掉某必选的排序参数,则此排序参数依然会正常参与排序,删除不生效。 调整排序参数的前后顺序,则排序依然以SQL中的排序参数顺序为准。调整不生效。 修改升序或降序的排序参数为其他排序方式,则会调用失败,不允许修改。 如果测试失败,可在“预览SQL”页签下查看实际运行的SQL语句是否符合预期,或者通过“日志”页签查看报错信息。 图5 测试SQL 单击“下一步”,进行API测试页面。
  • 测试API 填写入参取值。 如果单个参数需要传多个值时,写法如下: 字符串:'a','b','c' 数值:1,2 字段:a,b,c 图6 填写入参取值 (可选)调整排序参数描述pre_order_by的值。 pre_order_by的默认值已由系统根据已配置的所有排序参数给出,自定义排序默认为升序。排序参数描述pre_order_by的值填写形式为“排序参数参数名:ASC”或“排序参数参数名:DESC”,其中ASC表示升序,DESC表示降序,多个排序参数描述以“英文分号”进行分隔。勾选“是否传值”后,测试结果将按照pre_order_by的值排序。 对于pre_order_by的值,您可以进行如下修改: 删掉某可选的排序参数,则此排序参数不再参与排序。 修改自定义排序方式的排序参数为升序或降序方式,则此排序参数按照修改后的排序方式排序。 pre_order_by的值,不支持进行如下修改,否则会修改不生效或导致调用报错。 删掉某必选的排序参数,则此排序参数依然会正常参与排序,删除不生效。 调整排序参数的前后顺序,则排序依然以SQL中的排序参数顺序为准。调整不生效。 修改升序或降序的排序参数为其他排序方式,则会调用失败,不允许修改。 图7 调整排序参数描述pre_order_by的值 (可选)查看分页参数值。 采用默认分页方式时,可以查看分页参数情况,其中pageSize表示分页后的页面大小,pageNum表示页码。默认按100的大小分页,返回第1页数据。 图8 查看分页参数值 完成API参数的配置并保存后,单击左下角的“开始测试”,可进入API测试环节。 填写参数值,单击“开始测试”,即可在线发送API请求,在右侧可以看到API请求详情及返回内容。 测试过程中,如果数据服务API查询及返回数据的总时长超过默认60秒,会报超时错误。 如果测试失败,请查看错误提示并做相应的修改重新测试。 完成API测试之后,单击“确定”,即成功生成了一个数据API。
  • 测试API 填写入参取值。 如果单个参数需要传多个值时,写法如下: 字符串:'a','b','c' 数值:1,2 字段:a,b,c 图6 填写入参取值 (可选)调整排序参数描述pre_order_by的值。 系统根据5中已配置的所有排序参数已给出pre_order_by的默认值,自定义排序默认为升序。排序参数描述pre_order_by的值填写形式为“排序参数参数名:ASC”或“排序参数参数名:DESC”,其中ASC表示升序,DESC表示降序,多个排序参数描述以“英文分号”进行分隔。勾选“是否传值”后,测试结果将按照pre_order_by的值排序。 对于pre_order_by的值,您可以进行如下修改: 删掉某可选的排序参数,则此排序参数不再参与排序。 修改自定义排序方式的排序参数为升序或降序方式,则此排序参数按照修改后的排序方式排序。 pre_order_by的值,不支持进行如下修改,否则会修改不生效或导致调用报错。 删掉某必选的排序参数,则此排序参数依然会正常参与排序,删除不生效。 调整排序参数的前后顺序,则排序依然以配置排序参数时的排序参数顺序为准。调整不生效。 修改升序或降序的排序参数为其他排序方式,则会调用失败,不允许修改。 图7 调整排序参数描述pre_order_by的值 (可选)调整分页参数值。 系统会对返回数据进行分页,pageSize表示分页后的页面大小,pageNum表示页码。API调试时默认按100的大小分页,返回第1页数据。 API调试时,page_size (系统默认) 最大为100,当page_size值大于100时,默认查出的数据仍为100条。 图8 调整分页参数值 完成API参数的配置并保存后,单击左下角的“开始测试”,可进入API测试环节。 填写参数值,单击“开始测试”,即可在线发送API请求,在右侧可以看到API请求详情及返回内容。 测试过程中,如果数据服务API查询及返回数据的总时长超过默认60秒,会报超时错误。 如果测试失败,请查看错误提示并做相应的修改重新测试。 完成API测试之后,单击“确定”,即成功生成了一个数据API。
  • 操作场景 作业参数配置完成后,将进行字段映射的配置,您可以通过字段映射界面的可自定义新增字段。 如果是文件类数据源(FTP/SFTP/HDFS/OBS)之间相互迁移数据,且源端“文件格式”配置为“二进制格式”(即不解析文件内容直接传输),则没有字段映射这一步骤。 其他场景下, CDM 会自动匹配源端和目的端数据表字段,需用户检查字段映射关系和时间格式是否正确,例如:源字段类型是否可以转换为目的字段类型。 您可以单击字段映射界面的选择“添加新字段”自定义新增字段,通常用于标记数据库来源,以确保导入到目的端数据的完整性。 图1 字段映射 目前支持以下类型自定义字段: 常量 常量参数即参数值是固定的参数,不需要重新配置值。例如“lable”=“friends”用来标识常量值。 变量 您可以使用时间宏、表名宏、版本宏等变量来标记数据库来源信息。变量的语法:${variable},其中“variable”指的是变量。例如“input_time”=“${timestamp()}”用来标识当前时间的时间戳。 表达式 您可以使用表达式语言根据运行环境动态生成参数值。表达式的语法:#{expr},其中“expr”指的是表达式。例如“time”=“#{DateUtil.now()}”用来标识当前日期字符串。
  • 约束限制 如果在字段映射界面,CDM通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、 MRS Hudi及DLI做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 如果是导入到 数据仓库 服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。 如CDM不支持源端迁移字段类型,请参见不支持数据类型转换规避指导将字段类型转换为CDM支持的类型。
  • 总览页面说明 在总览页用户可以看到丰富的监控数据视图。数据服务总览页面分别从API和APP的视角,统计了相关度量数据。 以专享版为例,监控视图各项指标含义介绍如下: 图2 API视角数据统计 表1 API视角数据统计 分类 指标 说明 数据总览区 已发布 统计已成功发布的API数量。 开发中 统计开发中的API数量。 申请者 统计已发布API所授权的应用数量。 总调用 近7天(不含当天)所有集群下API的调用总次数。 成功 统计API调用成功的次数。 失败 统计API调用失败的次数。 合法 统计API合法调用的总次数,合法调用指校验通过的调用。 非法 统计API非法调用的总次数,非法调用指由于请求参数填写错误等原因导致的校验不通过的调用。 趋势图 调用趋势 展示所选时间维度下,集群维度的API调用次数曲线。 时间维度:近12小时,近1天,近7天,近 30天 集群维度:单集群,所有集群 调用次数:调用总次数、成功次数/失败次数、合法次数/非法次数 发布趋势 展示所选时间维度下,API发布次数曲线。 时间维度:今日、本周、本月、今年。 TOP5统计 调用比率TOP5 统计所选时间维度下,按照集群维度的API调用比率,排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 集群维度:单集群,所有集群 比率:成功率、失败率、合法率、非法率 调用时间TOP5 统计所选时间维度下,按照集群维度的API调用时长,排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 集群维度:单集群,所有集群 时长:时长平均总值、成功时长平均总值,失败时长平均总值 总调用次数TOP5 统计所选时间维度下,按照集群维度的API调用次数(同一API授权不同应用则合并计数),排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 集群维度:单集群,所有集群 调用次数:调用总次数、成功次数、失败次数、合法次数和非法次数。 单API调用次数TOP5 统计所选时间维度下,按照集群维度的API调用次数(同一API授权不同应用则分开计数),排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 集群维度:单集群,所有集群 调用次数:调用总次数、成功次数、失败次数、合法次数和非法次数。 图3 APP视角数据统计 表2 APP视角数据统计 分类 指标 说明 数据总览区 已申请 统计所有API授权的APP数量。 总调用 近7天(不含当天)所有集群下APP和IAM证方式API的调用总次数。 成功 统计APP和IAM认证方式API调用成功的次数。 失败 统计APP和IAM认证方式API调用失败的次数。 合法 统计APP和IAM认证方式API合法调用的总次数,合法调用指校验通过的调用。 非法 统计APP和IAM认证方式API非法调用的总次数,非法调用指由于请求参数填写错误等原因导致的校验不通过的调用。 趋势图 调用趋势 展示所选时间维度下,所有集群的APP和IAM认证方式API调用次数曲线。 时间维度:近12小时,近1天,近7天,近 30天 调用次数:调用总次数、成功次数/失败次数、合法次数/非法次数 TOP5统计 调用比率TOP5 统计所选时间维度下,所有集群的APP和IAM认证方式API调用比率,排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 比率:成功率、失败率、合法率、非法率 调用时间TOP5 统计所选时间维度下,所有集群的APP和IAM认证方式API调用时长,排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 时长:时长平均总值、成功时长平均总值,失败时长平均总值 总调用次数TOP5 统计所选时间维度下,所有集群的APP和IAM认证方式API调用次数(同一API授权不同应用则合并计数),排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 调用次数:调用总次数、成功次数、失败次数、合法次数和非法次数。 单APP调用次数TOP5 统计所选时间维度下,所有集群的APP和IAM认证方式API调用次数(同一API授权不同应用则分别计数),排序出TOP5 API。 时间维度:近12小时,近1天,近7天,近 30天 调用次数:调用总次数、成功次数、失败次数、合法次数和非法次数。
  • API开放方使用流程 您作为API提供者,需要实现一个或一组API的开放,那么您需要先后完成以下工作: 购买并管理专享版集群 如果您需要使用数据服务专享版,需要先购买专享版集群。 新建数据服务审核人 在创建API前,需要新建数据服务审核人。 创建API 创建API即生成API和注册API。其中,生成API支持两种方式(配置方式生成API和脚本/MyBatis方式生成API)。 调试API API创建后需要验证服务是否正常,管理控制台提供了调试功能。 发布API 只有将API发布后,API才支持被调用。 管理API 您可以根据您的需要,对已创建发布的API进行管理。 编排API 编排API是将已经开发好的服务API接口,在无需编写复杂代码的情况下,根据特定的业务逻辑和流程进行可视化的重组和重构,从而实现在不影响原生接口的前提下进行简便的二次开发。 (可选)配置流控策略 为了保护后端服务的稳定的考虑,您可以对API进行流量控制。 (可选)主动授权API 应用定义了一个API调用者的身份。对于使用APP或IAM认证方式的API,必须在API授权后,才能获得认证信息以用于API调用。
  • 配置达梦数据库 DM源端参数 从达梦数据库 DM导出数据时,源端作业参数如表1所示。 表1 达梦数据库 DM作为源端时的作业参数 参数类型 参数名 说明 取值样例 基本参数 使用SQL语句 导出关系型数据库的数据时,您可以选择使用自定义SQL语句导出。 否 SQL语句 “使用SQL语句”选择“是”时,您可以在这里输入自定义的SQL语句,CDM将根据该语句导出数据。 说明: SQL语句只能查询数据,支持join和嵌套写法,但不能有多条查询语句,比如 select * from table a; select * from table b。 不支持with语句。 不支持注释 ,比如 "--" ,“/*”。 不支持增删改操作,包括但不限于以下操作: load data delete from alter table create table drop table into outfile 如果SQL语句过长,会导致请求过长下发失败,继续创建作业系统会报错“错误请求”,此时您需要简化或清空SQL语句,再次尝试继续创建作业。 select id,name from sqoop.user; 模式或表空间 “使用SQL语句”选择“否”时,显示该参数,表示待抽取数据的模式或表空间名称。单击输入框后面的按钮可进入模式选择界面,用户也可以直接输入模式或表空间名称。 如果选择界面没有待选择的模式或表空间,请确认对应连接里的账号是否有元数据查询的权限。 说明: 该参数支持配置通配符(*),实现导出以某一前缀开头或者以某一后缀结尾的所有数据库。例如: SCHEMA*表示导出所有以“SCHEMA”开头的数据库。 *SCHEMA表示导出所有以“SCHEMA”结尾的数据库。 *SCHEMA*表示数据库名称中只要有“SCHEMA”字符串,就全部导出。 SCHEMA_E 表名 “使用SQL语句”选择“否”时,显示该参数,表示要抽取的表名。单击输入框后面的按钮可进入表的选择界面,用户也可以直接输入表名称。 如果选择界面没有待选择的表,请确认表是否已经创建,或者对应连接里的账号是否有元数据查询的权限。 该参数支持配置为时间宏变量,且一个路径名中可以有多个宏定义变量。使用时间宏变量和定时任务配合,可以实现定期同步新增数据,详细说明请参见使用时间宏变量完成增量同步。 该参数支持配置正则表达式,实现导出满足规则的所有数据库。例如:表名配置为user_[0-9]{1,2},会匹配 user_0 到 user_9,user_00 到 user_99 的表。 说明: 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 table 高级属性 抽取分区字段 “使用SQL语句”选择“否”时,显示该参数,表示抽取数据时使用该字段进行数据切分,CDM依据此字段将作业分割为多个任务并发执行。一般使用数据均匀分布的字段,例如以自然增长的序号字段作为分区字段。 单击输入框后面的按钮可进入字段选择界面,用户也可以直接输入抽取分区字段名。 说明: 抽取分区字段支持CHAR、VARCHAR、LONGVARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、REAL、FLOAT、DOUBLE、NUMERIC、DECIMAL、BIT、BOOLEAN、DATE、TIME、TIMESTAMP类型,建议该字段带有索引。 当选择CHAR、VARCHAR、LONGVARCHAR抽取分区字段类型时,字段值不支持ASCII字符代码表之外的字符,不支持中文字符。 id Where子句 “使用SQL语句”选择“否”时,显示该参数,表示配置抽取范围的Where子句,不配置时抽取整表。 该参数支持配置为时间宏变量,实现抽取指定日期的数据,详细说明请参见关系数据库增量迁移。 说明: 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 DS='${dateformat(yyyy-MM-dd,-1,DAY)}' 分区字段含有空值 是否允许分区字段包含空值。 是 父主题: 配置CDM作业源端参数
  • 配置神通(ST)源端参数 从神通(ST)导出数据时,源端作业参数如表1所示。 表1 神通(ST)作为源端时的作业参数 参数类型 参数名 说明 取值样例 基本参数 使用SQL语句 导出关系型数据库的数据时,您可以选择使用自定义SQL语句导出。 否 SQL语句 “使用SQL语句”选择“是”时,您可以在这里输入自定义的SQL语句,CDM将根据该语句导出数据。 说明: SQL语句只能查询数据,支持join和嵌套写法,但不能有多条查询语句,比如 select * from table a; select * from table b。 不支持with语句。 不支持注释 ,比如 "--" ,“/*”。 不支持增删改操作,包括但不限于以下操作: load data delete from alter table create table drop table into outfile 如果SQL语句过长,会导致请求过长下发失败,继续创建作业系统会报错“错误请求”,此时您需要简化或清空SQL语句,再次尝试继续创建作业。 select id,name from sqoop.user; 模式或表空间 “使用SQL语句”选择“否”时,显示该参数,表示待抽取数据的模式或表空间名称。单击输入框后面的按钮可进入模式选择界面,用户也可以直接输入模式或表空间名称。 如果选择界面没有待选择的模式或表空间,请确认对应连接里的账号是否有元数据查询的权限。 说明: 该参数支持配置通配符(*),实现导出以某一前缀开头或者以某一后缀结尾的所有数据库。例如: SCHEMA*表示导出所有以“SCHEMA”开头的数据库。 *SCHEMA表示导出所有以“SCHEMA”结尾的数据库。 *SCHEMA*表示数据库名称中只要有“SCHEMA”字符串,就全部导出。 SCHEMA_E 表名 “使用SQL语句”选择“否”时,显示该参数,表示要抽取的表名。单击输入框后面的按钮可进入表的选择界面,用户也可以直接输入表名称。 如果选择界面没有待选择的表,请确认表是否已经创建,或者对应连接里的账号是否有元数据查询的权限。 该参数支持配置为时间宏变量,且一个路径名中可以有多个宏定义变量。使用时间宏变量和定时任务配合,可以实现定期同步新增数据,详细说明请参见使用时间宏变量完成增量同步。 说明: 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 说明: 表名支持配置通配符(*),实现导出以某一前缀开头或者以某一后缀结尾的所有表(要求表中的字段个数和类型都一样)。例如: table*表示导出所有以“table”开头的表。 *table表示导出所有以“table”结尾的表。 *table*表示表名中只要有“table”字符串,就全部导出。 table 高级属性 抽取分区字段 “使用SQL语句”选择“否”时,显示该参数,表示抽取数据时使用该字段进行数据切分,CDM依据此字段将作业分割为多个任务并发执行。一般使用数据均匀分布的字段,例如以自然增长的序号字段作为分区字段。 单击输入框后面的按钮可进入字段选择界面,用户也可以直接输入抽取分区字段名。 说明: 抽取分区字段支持TINYINT、SMALLINT、INTEGER、BIGINT、REAL、FLOAT、DOUBLE、NUMERIC、DECIMAL、BIT、BOOLEAN、DATE、TIME、TIMESTAMP类型,建议该字段带有索引。 id Where子句 “使用SQL语句”选择“否”时,显示该参数,表示配置抽取范围的Where子句,不配置时抽取整表。 该参数支持配置为时间宏变量,实现抽取指定日期的数据,详细说明请参见关系数据库增量迁移。 说明: 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 DS='${dateformat(yyyy-MM-dd,-1,DAY)}' 分区字段含有空值 是否允许分区字段包含空值。 是 父主题: 配置CDM作业源端参数
  • 神通(ST)连接参数说明 连接神通(ST)数据库连接时,相关参数如表1所示。 作业运行中禁止修改密码或者更换用户。在作业运行过程中修改密码或者更换用户,密码不会立即生效且作业会运行失败。 表1 神通(ST)数据库连接参数 参数名 说明 取值样例 名称 连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。 st_link 数据库服务器 配置为要连接的数据库的IP地址或域名。 单击输入框后的“选择”,可获取用户的数据库实例列表。 192.168.0.1 端口 配置为要连接的数据库的端口。 3306 数据库名称 配置为要连接的数据库名称。 dbname 用户名 待连接数据库的用户。该数据库用户需要有数据表的读写权限,以及对元数据的读取权限。 cdm 密码 用户名密码。 - 使用Agent Agent功能待下线,无需配置。 - Agent Agent功能待下线,无需配置。 - 引用符号 可选参数,连接引用表名或列名时的分隔符号,参考对应数据库的产品文档进行配置。 ' 驱动版本 不同类型的关系数据库,需要适配不同的驱动。 - 单次请求行数 可选参数,单击“显示高级属性”后显示。 指定每次请求获取的行数,根据数据源端和作业数据规模的大小配置该参数。如果配置过大或过小,可能影响作业的时长。 1000 连接属性 可选参数,单击“添加”可增加多个指定数据源的JDBC连接器的属性,参考对应数据库的JDBC连接器说明文档进行配置。 常见配置举例如下: connectTimeout=360000与socketTimeout=360000:迁移数据量较大、或通过查询语句检索全表时,会由于连接超时导致迁移失败。此时可自定义连接超时时间与socket超时时间(单位ms),避免超时导致失败。 sslmode=require 父主题: 配置连接参数
  • 配置LogHub(SLS)源端参数 作业中源连接为LogHub(SLS)连接时,源端作业参数如表1所示。 表1 LogHub(SLS)作为源端时的作业参数 参数名 说明 取值样例 源连接名称 选择已配置的LogHub(SLS)连接。 sls_link 日志库 目标日志库的名称。 - 单次查询数据条数 一次从日志服务查询的数据条数。 128 数据消费开始时间 数据消费的开始时间位点,即日志数据到达LogHub(SLS)的时间,yyyyMMddHHmmss格式的时间字符串。 说明: “数据消费开始时间”和“数据消费结束时间”需要互相组合配套使用,时间范围左闭右开。 20220113013000 数据消费结束时间 数据消费的结束时间位点,yyyyMMddHHmmss格式的时间字符串。 20220213013000 父主题: 配置CDM作业源端参数
  • LogHub(SLS)连接参数说明 连接LogHub(SLS)时,相关参数如表1所示。 表1 LogHub(SLS)连接参数 参数名 说明 取值样例 名称 连接名称。 sls_link 日志服务endPoint 访问一个项目(Project)及其内部日志数据的URL。 终端节点(Endpoint)即调用API的请求地址,不同服务不同区域的终端节点不同。本服务的Endpoint可从终端节点Endpoint获取。 - 项目 目标日志服务的项目名称,是日志服务中的资源管理单元,用于隔离和控制资源。 sls_project AccessKeyID 访问日志服务的访问密钥,用于标识用户。 - accessKeySecret 访问日志服务的访问密钥,用来验证用户的密钥。 - 父主题: 配置连接参数
  • 新建转换器 CDM支持字段内容转换,如果需要可单击操作列下,进入转换器列表界面,再单击“新建转换器”。 图2 新建转换器 CDM可以在迁移过程中对字段进行转换,目前支持以下字段转换器: 脱敏 隐藏字符串中的关键信息,例如要将“12345678910”转换为“123****8910”,则配置如下: “起始保留长度”为“3”。 “结尾保留长度”为“4”。 “替换字符”为“*”。 去前后空格 自动去字符串前后的空值,不需要配置参数。 字符串反转 自动反转字符串,例如将“ABC”转换为“CBA”,不需要配置参数。 字符串替换 替换字符串,需要用户配置被替换的对象,以及替换后的值。 去换行 将字段中的换行符(\n、\r、\r\n)删除。 表达式转换 数据进行转换过程中,替换内容包含特殊字符时,需要先使用\将该字符转义成普通字符。 表达式支持以下两个环境变量: 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")
  • 操作场景 作业参数配置完成后,将进行字段映射的配置,您可以通过字段映射界面的可自定义新增字段,也可单击操作列下创建字段转换器。 如果是文件类数据源(FTP/SFTP/HDFS/OBS)之间相互迁移数据,且源端“文件格式”配置为“二进制格式”(即不解析文件内容直接传输),则没有字段映射这一步骤。 其他场景下,CDM会自动匹配源端和目的端数据表字段,需用户检查字段映射关系和时间格式是否正确,例如:源字段类型是否可以转换为目的字段类型。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。
  • 约束限制 作业源端开启“使用SQL语句”参数时不支持配置转换器。 如果在字段映射界面,CDM通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、MRS Hudi及DLI做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 如果是导入到数据仓库服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。 如CDM不支持源端迁移字段类型,请参见不支持数据类型转换规避指导将字段类型转换为CDM支持的类型。
  • 新增字段 您可以单击字段映射界面的选择“添加新字段”自定义新增字段,通常用于标记数据库来源,以确保导入到目的端数据的完整性。 图1 字段映射 目前支持以下类型自定义字段: 常量 常量参数即参数值是固定的参数,不需要重新配置值。例如“lable”=“friends”用来标识常量值。 变量 您可以使用时间宏、表名宏、版本宏等变量来标记数据库来源信息。变量的语法:${variable},其中“variable”指的是变量。例如“input_time”=“${timestamp()}”用来标识当前时间的时间戳。 表达式 您可以使用表达式语言根据运行环境动态生成参数值。表达式的语法:#{expr},其中“expr”指的是表达式。例如“time”=“#{DateUtil.now()}”用来标识当前日期字符串。
共100000条
提示

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