Azure Data Factory中如何提取Timestamp时间部分写入SQL专用池Time列?
解决ADF中从Timestamp提取时间写入Azure SQL专用池Time列的问题
问题分析
直接用substring提取时间部分后写入Time列出现空值,核心原因是:
- 源端Timestamp(ADF中对应
datetime类型)未先转换为固定格式的字符串就截取,不同数据源返回的datetime字符串格式可能不一致,导致截取结果不符合Azure SQL Time类型的格式要求(需为HH:mm:ss[.nnnnnnn]格式) - 未显式将截取后的字符串转换为ADF的
time类型,直接写入时类型不匹配
解决方案
方法1:使用formatDateTime函数格式化后提取时间(推荐)
ADF虽无直接提取时间的函数,但可通过formatDateTime将datetime类型转换为符合要求的时间字符串,再转成time类型:
在表达式构建器中使用以下表达式:
toTime(formatDateTime(源Timestamp字段, 'HH:mm:ss.fffffff'))
formatDateTime将datetime格式化为匹配Azure SQL Time列精度的时间字符串(7位毫秒精度)toTime将字符串转换为ADF的time类型,确保和目标列类型完全匹配
方法2:修正substring的截取逻辑(需确认源datetime字符串格式)
若确认源端datetime的字符串格式固定为yyyy-MM-dd HH:mm:ss.fffffff这类格式,可调整截取逻辑并转换类型:
toTime(substring(toString(源Timestamp字段), 11, 16))
- 先通过
toString将datetime转为字符串,从第11位开始截取16位(覆盖时分秒及毫秒部分),最后用toTime转换类型
验证步骤
- 在ADF数据预览中查看转换后的字段值,确认格式为
HH:mm:ss[.nnnnnnn] - 检查字段映射:确保转换后的字段和目标Time列的映射关系正确,无类型不匹配提示
- 运行调试管道,查看目标Azure SQL专用池中的数据是否正常写入
内容的提问来源于stack exchange,提问作者Vivek KB
相关产品推荐
相关产品推荐

