网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
更新时间:2024-07-30 GMT+08:00
分享

配置CDM作业字段映射

操作场景

  • 作业参数配置完成后,将进行字段映射的配置,您可以通过字段映射界面的可自定义新增字段,也可单击操作列下创建字段转换器。
  • 如果是文件类数据源(FTP/SFTP/HDFS/OBS)之间相互迁移数据,且源端“文件格式”配置为“二进制格式”(即不解析文件内容直接传输),则没有字段映射这一步骤。
  • 其他场景下,CDM会自动匹配源端和目的端数据表字段,需用户检查字段映射关系和时间格式是否正确,例如:源字段类型是否可以转换为目的字段类型。
  • 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。

约束限制

  • 作业源端开启“使用SQL语句”参数时不支持配置转换器。
  • 如果在字段映射界面,CDM通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。
  • 关系数据库、Hive、MRS Hudi及DLI做源端时,不支持获取样值功能。
  • SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。
  • 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。
  • 当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。
  • 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。
  • 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。
  • 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。
  • 如果是导入到数据仓库服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列:
    1. 有主键可以使用主键作为分布列。
    2. 多个数据段联合做主键的场景,建议设置所有主键作为分布列。
    3. 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。
  • 如CDM不支持源端迁移字段类型,请参见不支持数据类型转换规避指导将字段类型转换为CDM支持的类型。

新增字段

您可以单击字段映射界面的选择“添加新字段”自定义新增字段,通常用于标记数据库来源,以确保导入到目的端数据的完整性。
图1 字段映射
目前支持以下类型自定义字段:
  • 常量

    常量参数即参数值是固定的参数,不需要重新配置值。例如“lable”=“friends”用来标识常量值。

  • 变量

    您可以使用时间宏、表名宏、版本宏等变量来标记数据库来源信息。变量的语法:${variable},其中“variable”指的是变量。例如“input_time”=“${timestamp()}”用来标识当前时间的时间戳。

  • 表达式

    您可以使用表达式语言根据运行环境动态生成参数值。表达式的语法:#{expr},其中“expr”指的是表达式。例如“time”=“#{DateUtil.now()}”用来标识当前日期字符串。

新建转换器

CDM支持字段内容转换,如果需要可单击操作列下,进入转换器列表界面,再单击“新建转换器”
图2 新建转换器

CDM可以在迁移过程中对字段进行转换,目前支持以下字段转换器:

  • 脱敏
    隐藏字符串中的关键信息,例如要将“12345678910”转换为“123****8910”,则配置如下:
    • “起始保留长度”“3”
    • “结尾保留长度”“4”
    • “替换字符”“*”
  • 去前后空格

    自动去字符串前后的空值,不需要配置参数。

  • 字符串反转

    自动反转字符串,例如将“ABC”转换为“CBA”,不需要配置参数。

  • 字符串替换

    替换字符串,需要用户配置被替换的对象,以及替换后的值。

  • 去换行

    将字段中的换行符(\n、\r、\r\n)删除。

  • 表达式转换

    数据进行转换过程中,替换内容包含特殊字符时,需要先使用\将该字符转义成普通字符。

    • 表达式支持以下两个环境变量:
      • value:当前字段值。
      • row:当前行,数组类型。
    • 表达式支持的工具类用法罗列如下,未列出即表示不支持:
      1. 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”

        表达式:StringUtils.lowerCase(value)

      2. 将当前字段的字符串全部转为大写。

        表达式:StringUtils.upperCase(value)

      3. 如果想将第1个日期字段格式从“2018-01-05 15:15:05”转换为“20180105”。

        表达式:DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd")

      4. 如果想将时间戳转换成“yyyy-MM-dd hh:mm:ss”格式的日期字符串的类型,例如字段值为“1701312046588”,转换后为“2023-11-30 10:40:46”。

        表达式:DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss")

      5. 如果想将“yyyy-MM-dd hh:mm:ss”格式的日期字符串转换成时间戳的类型。

        表达式:DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss"))

      6. 如果当前字段值为“yyyy-MM-dd”格式的日期字符串,需要截取年,例如字段值为“2017-12-01”,转换后为“2017”

        表达式:StringUtils.substringBefore(value,"-")

      7. 如果当前字段值为数值类型,转换后值为当前值的两倍。

        表达式:value*2

      8. 如果当前字段值为“true”,转换后为“Y”,其它值则转换后为“N”

        表达式:value=="true"?"Y":"N"

      9. 如果当前字段值为字符串类型,当为空时,转换为“Default”,否则不转换。

        表达式:empty value? "Default":value

      10. 如果想将日期字段格式从“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")

      11. 获取一个36位的UUID(Universally Unique Identifier,通用唯一识别码)。

        表达式:CommonUtils.randomUUID()

      12. 如果当前字段值为字符串类型,将首字母转换为大写,例如将“cat”转换为“Cat”

        表达式:StringUtils.capitalize(value)

      13. 如果当前字段值为字符串类型,将首字母转换为小写,例如将“Cat”转换为“cat”

        表达式:StringUtils.uncapitalize(value)

      14. 如果当前字段值为字符串类型,使用空格填充为指定长度,并且将字符串居中,当字符串长度不小于指定长度时不转换,例如将“ab”转换为长度为4的“ab”

        表达式:StringUtils.center(value,4)

      15. 删除字符串末尾的一个换行符(包括“\n”“\r”或者“\r\n”),例如将“abc\r\n\r\n”转换为“abc\r\n”

        表达式:StringUtils.chomp(value)

      16. 如果字符串中包含指定的字符串,则返回布尔值true,否则返回false。例如“abc”中包含“a”,则返回true。

        表达式:StringUtils.contains(value,"a")

      17. 如果字符串中包含指定字符串的任一字符,则返回布尔值true,否则返回false。例如“zzabyycdxx”中包含“z”“a”任意一个,则返回true。

        表达式:StringUtils.containsAny(value,"za")

      18. 如果字符串中不包含指定的所有字符,则返回布尔值true,包含任意一个字符则返回false。例如“abz”中包含“xyz”里的任意一个字符,则返回false。

        表达式:StringUtils.containsNone(value,"xyz")

      19. 如果当前字符串只包含指定字符串中的字符,则返回布尔值true,包含任意一个其它字符则返回false。例如“abab”只包含“abc”中的字符,则返回true。

        表达式:StringUtils.containsOnly(value,"abc")

      20. 如果字符串为空或null,则转换为指定的字符串,否则不转换。例如将空字符转换为null。

        表达式:StringUtils.defaultIfEmpty(value,null)

      21. 如果字符串以指定的后缀结尾(包括大小写),则返回布尔值true,否则返回false。例如“abcdef”后缀不为null,则返回false。

        表达式:StringUtils.endsWith(value,null)

      22. 如果字符串和指定的字符串完全一样(包括大小写),则返回布尔值true,否则返回false。例如比较字符串“abc”“ABC”,则返回false。

        表达式:StringUtils.equals(value,"ABC")

      23. 从字符串中获取指定字符串的第一个索引,没有则返回整数-1。例如从“aabaabaa”中获取“ab”的第一个索引1。

        表达式:StringUtils.indexOf(value,"ab")

      24. 从字符串中获取指定字符串的最后一个索引,没有则返回整数-1。例如从“aFkyk”中获取“k”的最后一个索引4。

        表达式:StringUtils.lastIndexOf(value,"k")

      25. 从字符串中指定的位置往后查找,获取指定字符串的第一个索引,没有则转换为“-1”。例如“aabaabaa”中索引3的后面,第一个“b”的索引是5。

        表达式:StringUtils.indexOf(value,"b",3)

      26. 从字符串获取指定字符串中任一字符的第一个索引,没有则返回整数-1。例如从“zzabyycdxx”中获取“z”“a”的第一个索引0。

        表达式:StringUtils.indexOfAny(value,"za")

      27. 如果字符串仅包含Unicode字符,返回布尔值true,否则返回false。例如“ab2c”中包含非Unicode字符,返回false。

        表达式:StringUtils.isAlpha(value)

      28. 如果字符串仅包含Unicode字符或数字,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。

        表达式:StringUtils.isAlphanumeric(value)

      29. 如果字符串仅包含Unicode字符、数字或空格,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。

        表达式:StringUtils.isAlphanumericSpace(value)

      30. 如果字符串仅包含Unicode字符或空格,返回布尔值true,否则返回false。例如“ab2c”中包含Unicode字符和数字,返回false。

        表达式:StringUtils.isAlphaSpace(value)

      31. 如果字符串仅包含ASCII可打印字符,返回布尔值true,否则返回false。例如“!ab-c~”返回true。

        表达式:StringUtils.isAsciiPrintable(value)

      32. 如果字符串为空或null,返回布尔值true,否则返回false。

        表达式:StringUtils.isEmpty(value)

      33. 如果字符串中仅包含Unicode数字,返回布尔值true,否则返回false。

        表达式:StringUtils.isNumeric(value)

      34. 获取字符串最左端的指定长度的字符,例如获取“abc”最左端的2位字符“ab”

        表达式:StringUtils.left(value,2)

      35. 获取字符串最右端的指定长度的字符,例如获取“abc”最右端的2位字符“bc”

        表达式:StringUtils.right(value,2)

      36. 将指定字符串拼接至当前字符串的左侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”左侧,拼接后长度为8,则转换后为“yzyzybat”

        表达式:StringUtils.leftPad(value,8,"yz")

      37. 将指定字符串拼接至当前字符串的右侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”右侧,拼接后长度为8,则转换后为“batyzyzy”

        表达式:StringUtils.rightPad(value,8,"yz")

      38. 如果当前字段为字符串类型,获取当前字符串的长度,如果该字符串为null,则返回0。

        表达式:StringUtils.length(value)

      39. 如果当前字段为字符串类型,删除其中所有的指定字符串,例如从“queued”中删除“ue”,转换后为“qd”

        表达式:StringUtils.remove(value,"ue")

      40. 如果当前字段为字符串类型,移除当前字段末尾指定的子字符串。指定的子字符串若不在当前字段的末尾,则不转换,例如移除当前字段“www.domain.com”后的“.com”

        表达式:StringUtils.removeEnd(value,".com")

      41. 如果当前字段为字符串类型,移除当前字段开头指定的子字符串。指定的子字符串若不在当前字段的开头,则不转换,例如移除当前字段“www.domain.com”前的“www.”

        表达式:StringUtils.removeStart(value,"www.")

      42. 如果当前字段为字符串类型,替换当前字段中所有的指定字符串,例如将“aba”中的“a”“z”替换,转换后为“zbz”

        表达式:StringUtils.replace(value,"a","z")

        替换内容包含特殊字符时,需要先把该字符转义成普通字符,例如,客户想通过该表达式把字符串中 \t 去掉时,需要配置为: StringUtils.replace(value,"\\t","")(即把 \ 再次转义)。

      43. 如果当前字段为字符串类型,一次替换字符串中的多个字符,例如将字符串“hello”中的“h”“j”替换,“o”“y”替换,转换后为“jelly”

        表达式:StringUtils.replaceChars(value,"ho","jy")

      44. 如果字符串以指定的前缀开头(区分大小写),则返回布尔值true,否则返回false,例如当前字符串“abcdef”“abc”开头,则返回true。

        表达式:StringUtils.startsWith(value,"abc")

      45. 如果当前字段为字符串类型,去除字段中首、尾处所有指定的字符,例如去除“abcyx”中首尾所有的“x”“y”“z”“b”,转换后为“abc”

        表达式:StringUtils.strip(value,"xyzb")

      46. 如果当前字段为字符串类型,去除字段末尾所有指定的字符,例如去除当前字段末尾的“abc”字符串。

        表达式:StringUtils.stripEnd(value,"abc")

      47. 如果当前字段为字符串类型,去除字段开头所有指定的字符,例如去除当前字段开头的所有空格。

        表达式:StringUtils.stripStart(value,null)

      48. 如果当前字段为字符串类型,获取字符串指定位置后(索引从0开始,包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”索引为2的字符(即c)及之后的字符串,则转换后为“cde”

        表达式:StringUtils.substring(value,2)

      49. 如果当前字段为字符串类型,获取字符串指定区间(索引从0开始,区间起点包括指定位置的字符,区间终点不包含指定位置的字符)的子字符串,区间位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后、第4个字符(即e)之前的字符串,则转换后为“cd”

        表达式:StringUtils.substring(value,2,4)

      50. 如果当前字段为字符串类型,获取当前字段里第一个指定字符后的子字符串。例如获取“abcba”中第一个“b”之后的子字符串,转换后为“cba”

        表达式:StringUtils.substringAfter(value,"b")

      51. 如果当前字段为字符串类型,获取当前字段里最后一个指定字符后的子字符串。例如获取“abcba”中最后一个“b”之后的子字符串,转换后为“a”

        表达式:StringUtils.substringAfterLast(value,"b")

      52. 如果当前字段为字符串类型,获取当前字段里第一个指定字符前的子字符串。例如获取“abcba”中第一个“b”之前的子字符串,转换后为“a”

        表达式:StringUtils.substringBefore(value,"b")

      53. 如果当前字段为字符串类型,获取当前字段里最后一个指定字符前的子字符串。例如获取“abcba”中最后一个“b”之前的子字符串,转换后为“abc”

        表达式:StringUtils.substringBeforeLast(value,"b")

      54. 如果当前字段为字符串类型,获取嵌套在指定字符串之间的子字符串,没有匹配的则返回null。例如获取“tagabctag”“tag”之间的子字符串,转换后为“abc”

        表达式:StringUtils.substringBetween(value,"tag")

      55. 如果当前字段为字符串类型,删除当前字符串两端的控制字符(char≤32),例如删除字符串前后的空格。

        表达式:StringUtils.trim(value)

      56. 将当前字符串转换为字节,如果转换失败,则返回0。

        表达式:NumberUtils.toByte(value)

      57. 将当前字符串转换为字节,如果转换失败,则返回指定值,例如指定值配置为1。

        表达式:NumberUtils.toByte(value,1)

      58. 将当前字符串转换为Double数值,如果转换失败,则返回0.0d。

        表达式:NumberUtils.toDouble(value)

      59. 将当前字符串转换为Double数值,如果转换失败,则返回指定值,例如指定值配置为1.1d。

        表达式:NumberUtils.toDouble(value,1.1d)

      60. 将当前字符串转换为Float数值,如果转换失败,则返回0.0f。

        表达式:NumberUtils.toFloat(value)

      61. 将当前字符串转换为Float数值,如果转换失败,则返回指定值,例如配置指定值为1.1f。

        表达式:NumberUtils.toFloat(value,1.1f)

      62. 将当前字符串转换为Int数值,如果转换失败,则返回0。

        表达式:NumberUtils.toInt(value)

      63. 将当前字符串转换为Int数值,如果转换失败,则返回指定值,例如配置指定值为1。

        表达式:NumberUtils.toInt(value,1)

      64. 将字符串转换为Long数值,如果转换失败,则返回0。

        表达式:NumberUtils.toLong(value)

      65. 将当前字符串转换为Long数值,如果转换失败,则返回指定值,例如配置指定值为1L。

        表达式:NumberUtils.toLong(value,1L)

      66. 将字符串转换为Short数值,如果转换失败,则返回0。

        表达式:NumberUtils.toShort(value)

      67. 将当前字符串转换为Short数值,如果转换失败,则返回指定值,例如配置指定值为1。

        表达式:NumberUtils.toShort(value,1)

      68. 将当前IP字符串转换为Long数值,例如将“10.78.124.0”转换为Long数值是“172915712”

        表达式:CommonUtils.ipToLong(value)

      69. 从网络读取一个IP与物理地址映射文件,并存放到Map集合,这里的URL是IP与地址映射文件存放地址,例如“http://10.114.205.45:21203/sqoop/IpList.csv”

        表达式:HttpsUtils.downloadMap("url")

      70. 将IP与地址映射对象缓存起来并指定一个key值用于检索,例如“ipList”

        表达式:CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url"))

      71. 取出缓存的IP与地址映射对象。

        表达式:CommonUtils.getCache("ipList")

      72. 判断是否有IP与地址映射缓存。

        表达式:CommonUtils.cacheExists("ipList")

      73. 根据IP取出对应的详细地址:国家_省份_城市_运营商,例如“1xx.78.124.0”对应的地址为“中国_广东_深圳_电信”,取不到对应地址则默认“**_**_**_**”。如果需要,可通过StringUtil类表达式对地址进行进一步拆分。

        表达式:CommonUtils.getMapValue(CommonUtils.ipToLong(value),CommonUtils.cacheExists("ipLis")?CommonUtils.getCache("ipLis"):CommonUtils.setCache("ipLis",HttpsUtils.downloadMap("url")))

      74. 根据指定的偏移类型(month/day/hour/minute/second)及偏移量(正数表示增加,负数表示减少),将指定格式的时间转换为一个新时间,例如将“2019-05-21 12:00:00”增加8个小时。

        表达式:DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8)

      75. 如果value值为空或者null时,则返回字符串“aaa”,否则返回value。

        表达式:StringUtils.defaultIfEmpty(value,"aaa")

特殊链路说明

  • 当源端为DLI,目的端为DWS时,DLI的tinyint类型字段映射为DWS的smallint类型字段。
  • 当源端为Hudi,目的端为DWS时,Hudi的Double类型字段映射为DWS的Float类型字段。

相关文档