云数据迁移 CDM云数据迁移 CDM

计算
弹性云服务器 ECS
云耀云服务器 HECS
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机 CPH
VR云渲游平台 CVR
特惠算力专区
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
内容分发网络 CDN
存储容灾服务 SDRS
弹性文件服务 SFS
云服务器备份 CSBS
云硬盘备份 VBS
数据快递服务 DES
专属企业存储服务
智能边缘
智能边缘云 IEC
EI 企业智能
EI安视服务
AI开发平台ModelArts
数据湖治理中心 DGC
数据仓库服务 GaussDB(DWS)
企业级AI应用开发专业套件 ModelArts Pro
数据湖探索 DLI
华为HiLens
云搜索服务 CSS
数据接入服务 DIS
表格存储服务 CloudTable
数据湖工厂 DLF
图引擎服务 GES
推荐系统 RES
文字识别 OCR
内容审核 Moderation
图像识别 Image
图像搜索 ImageSearch
人脸识别服务 FRS
对话机器人服务 CBS
视频分析服务 VAS
数据可视化 DLV
视频接入服务 VIS
自然语言处理 NLP
语音交互服务 SIS
知识图谱 KG
医疗智能体 EIHealth
可信智能计算服务 TICS
园区智能体 CampusGo
实时流计算服务 CS
人证核身服务 IVS
IoT物联网
设备接入 IoTDA
IoT物联网
全球SIM联接 GSL
设备发放 IoTDP
IoT开发者服务
IoT边缘 IoTEdge
IoT数据分析
路网数字化服务 DRIS
开发与运维
项目管理 ProjectMan
代码托管 CodeHub
流水线 CloudPipeline
代码检查 CodeCheck
编译构建 CloudBuild
部署 CloudDeploy
云测 CloudTest
发布 CloudRelease
移动应用测试 MobileAPPTest
CloudIDE
Classroom
软件开发平台 DevCloud
开源镜像站 Mirrors
视频
媒体处理 MPC
视频点播 VOD
视频直播 Live
实时音视频 SparkRTC
管理与部署
统一身份认证服务 IAM
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云审计服务 CTS
云日志服务 LTS
标签管理服务 TMS
资源管理服务 RMS
应用身份管理服务 OneAccess
专属云
专属计算集群 DCC
专属分布式存储服务 DSS
域名与网站
域名注册服务 Domains
云速建站 CloudSite
企业协同
华为云WeLink
会议
ISDP
解决方案
全栈专属服务
高性能计算 HPC
SAP
游戏云
混合云灾备
快视频
华为工业云平台 IMC
价格
价格原则
成本优化最佳实践
昇腾
昇腾MindX SDK (20.3)
其他
管理控制台
消息中心
产品价格详情
系统权限
我的凭证
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
应用编排服务 AOS
容器交付流水线 ContainerOps
应用服务网格 ASM
多云容器平台 MCP
基因容器 GCS
容器洞察引擎 CIE
容器批量计算 BCE
云原生服务中心 OSC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
数据库
云数据库 RDS
文档数据库服务 DDS
分布式数据库中间件 DDM
数据复制服务 DRS
数据管理服务 DAS
云数据库 GaussDB(for MySQL)
云数据库 GaussDB NoSQL
云数据库 GaussDB (for openGauss)
数据库和应用迁移 UGO
大数据
MapReduce服务 MRS
应用中间件
应用管理与运维平台 ServiceStage
分布式缓存服务 DCS
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
消息通知服务 SMN
微服务引擎 CSE
云性能测试服务 CPTS
区块链服务 BCS
API网关 APIG
应用魔方 AppCube
分布式消息服务RocketMQ版
多云高可用服务 MAS
可信跨链数据链接服务 TCDAS
企业应用
云桌面 Workspace
云解析服务 DNS
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMAExchange
ROMA API
鸿源云道
华为乾坤
安全与合规
Web应用防火墙 WAF
漏洞扫描服务 VSS
企业主机安全 HSS
容器安全服务 CGS
数据加密服务 DEW
数据库安全服务 DBSS
态势感知 SA
云堡垒机 CBH
SSL证书管理 SCM
云证书管理服务 CCM
管理检测与响应 MDR
数据安全中心 DSC
威胁检测服务 MTD
DDoS防护 ADS
云防火墙 CFW
应用信任中心 ATC
安全技术与应用
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
智能协作
IdeaHub
企业网络
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
废弃-华为乾坤安全云服务
云通信
语音通话 VoiceCall
消息&短信 MSGSMS
隐私保护通话 PrivateNumber
开发者工具
SDK开发指南
API签名指南
DevStar
HCloud CLI
Terraform
Ansible
云生态
云市场
鲲鹏
昇腾
合作伙伴中心
华为云学院
用户服务
帐号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
网站备案
支持计划
专业服务
合作伙伴支持计划
更新时间:2021/07/08 GMT+08:00
分享

字段转换

在创建表/文件迁移作业的字段映射界面,可新建字段转换器,如图1所示。
图1 新建字段转换器

当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。

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

脱敏

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

去前后空格

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

字符串反转

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

字符串替换

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

去换行

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

表达式转换

使用JSP表达式语言(Expression Language)对当前字段或整行数据进行转换。JSP表达式语言可以用来创建算术和逻辑表达式。在表达式内可以使用整型数,浮点数,字符串,常量true、false和null。

表达式支持以下两个环境变量:
  • value:当前字段值。
  • row:当前行,数组类型。
表达式支持以下工具类:
  • StringUtils:字符串处理类,参考Java SDK代码的包结构“org.apache.commons.lang.StringUtils”
  • DateUtils:日期工具类。
  • CommonUtils:公共工具类。
  • NumberUtils:字符串转数值类。
  • HttpsUtils:读取网络文件类。

应用举例:

  1. 给当前字段设置一个字符串常量,例如设置为VIP。

    表达式:"VIP"

  2. 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”

    表达式:StringUtils.lowerCase(value)

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

    表达式:StringUtils.upperCase(value)

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

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

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

    表达式:value*2

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

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

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

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

  8. 如果当前字段、第1、第2字段为数值类型,当前字段转换为第1字段与第2字段拼接后的值。

    表达式:row[0]+row[1]

  9. 如果当前字段为Date或Timestamp类型,转换后返回当前年份,类型为Int。

    表达式:DateUtils.getYear(value)

  10. 如果当前字段为“yyyy-MM-dd”格式的时间日期字符串,转换成Date类型。

    表达式:DateUtils.format(value,"yyyy-MM-dd")

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

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

    表达式:CommonUtils.randomUUID()

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

    表达式:StringUtils.capitalize(value)

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

    表达式:StringUtils.uncapitalize(value)

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

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

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

    表达式:StringUtils.chomp(value)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    表达式:StringUtils.isAlpha(value)

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

    表达式:StringUtils.isAlphanumeric(value)

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

    表达式:StringUtils.isAlphanumericSpace(value)

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

    表达式:StringUtils.isAlphaSpace(value)

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

    表达式:StringUtils.isAsciiPrintable(value)

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

    表达式:StringUtils.isEmpty(value)

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

    表达式:StringUtils.isNumeric(value)

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

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

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

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

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

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

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

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

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

    表达式:StringUtils.length(value)

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

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

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

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

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

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

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

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

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

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

  45. 如果当前字段为字符串类型,使用指定分隔符将提供的文本拆分为数组。例如将“ab:cd:ef”“:”分隔,转换后为“["ab","cd","ef"]”

    表达式:StringUtils.split(value,":")

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

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

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

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

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

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

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

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

  50. 如果当前字段为字符串类型,获取字符串指定位置后(不包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置。例如获取“abcde”第2个字符后的字符串,则转换后为“cde”

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

  51. 如果当前字段为字符串类型,获取字符串指定区间的子字符串,区间位置如果为负数,则从末尾往前计算位置。例如获取“abcde”第2个字符后、第5个字符前的字符串,则转换后为“cd”

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

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

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

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

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

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

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

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

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

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

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

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

    表达式:StringUtils.trim(value)

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

    表达式:NumberUtils.toByte(value)

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

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

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

    表达式:NumberUtils.toDouble(value)

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

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

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

    表达式:NumberUtils.toFloat(value)

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

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

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

    表达式:NumberUtils.toInt(value)

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

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

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

    表达式:NumberUtils.toLong(value)

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

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

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

    表达式:NumberUtils.toShort(value)

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

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

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

    表达式:CommonUtils.ipToLong(value)

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

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

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

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

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

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

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

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

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

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

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

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

分享:

    相关文档

    相关产品