如何在Azure Data Factory中将as_of_date字段转为yyyy-MM-dd格式
解决方法
一、直接修改Copy活动的参数表达式(快速实现)
你现在的参数表达式直接拼接了原始的as_of_date字符串,只需在拼接前将其转换为yyyy-MM-dd格式即可。因为源数据是yyyyMMdd格式的字符串,先通过parseDateTime将其解析为日期对象,再用formatDateTime输出目标格式。
修改后的代码如下:
@concat('XYZ_', pipeline().parameters.TableName, '_', formatDateTime(parseDateTime(activity('Lookup1').output.firstRow.as_of_date, 'yyyyMMdd'), 'yyyy-MM-dd'), '_', formatDateTime(utcNow(),'yyyyMMddhhmmss'),'.txt' )
parseDateTime(activity('Lookup1').output.firstRow.as_of_date, 'yyyyMMdd'):把yyyyMMdd格式的字符串解析为日期对象formatDateTime(..., 'yyyy-MM-dd'):将日期对象格式化为yyyy-MM-dd的字符串
二、利用Lookup活动的「类型转换设置」实现
这种方式会把Lookup返回的as_of_date直接转成Date类型,后续使用时直接格式化即可,步骤如下:
- 打开Lookup活动的「源」配置面板,找到「类型转换」选项
- 添加一条转换规则:
- 字段名:
as_of_date - 源数据类型:
String - 目标数据类型:
Date - 输入格式:
yyyyMMdd
- 字段名:
- 保存配置后,Lookup输出的
as_of_date就会是Date类型,此时Copy活动的参数可以修改为:
@concat('XYZ_', pipeline().parameters.TableName, '_', formatDateTime(activity('Lookup1').output.firstRow.as_of_date, 'yyyy-MM-dd'), '_', formatDateTime(utcNow(),'yyyyMMddhhmmss'),'.txt' )
这种方式的好处是把日期格式的处理统一在Lookup环节,后续使用时无需重复解析字符串。
三、针对Copy活动预览源的处理
如果as_of_date来自Copy活动的源数据(而非Lookup),因为源格式同样是yyyyMMdd字符串,处理逻辑和上面一致:
- 若在Sink文件名中使用,直接用
parseDateTime+formatDateTime转换:@concat('XYZ_', pipeline().parameters.TableName, '_', formatDateTime(parseDateTime(item().as_of_date, 'yyyyMMdd'), 'yyyy-MM-dd'), '_', formatDateTime(utcNow(),'yyyyMMddhhmmss'),'.txt' ) - 若在数据映射中需要转换格式,可在Copy活动的「映射」面板里给
as_of_date字段设置类型转换,指定源格式yyyyMMdd,目标格式yyyy-MM-dd。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

