Azure Data Factory循环复制文件时添加时间戳失败求助
Azure Data Factory文件名加时间戳报错的解决办法
问题原因
@pipeline().TriggerTime返回的原生时间格式里包含Blob文件名禁用的特殊字符(比如冒号:、T、Z),直接拼接到文件名后,生成的文件名不符合Azure Blob存储的命名规则,导致Copy活动无法识别或创建合法的目标Blob路径,从而触发“The required Blob is missing”错误。
具体解决步骤
- 转换时间戳为合法格式:使用
formatDateTime函数把TriggerTime转换成无特殊字符的格式,比如yyyyMMddHHmmss(年月日时分秒),表达式写法:@formatDateTime(pipeline().TriggerTime, 'yyyyMMddHHmmss') - 调整参数或拼接逻辑:
- 要么直接修改数据集的
Now参数,将其默认值设为上述格式化后的时间表达式,不再传入原始TriggerTime; - 要么在目标文件名的拼接逻辑中直接使用格式化后的时间,例如写成:
@concat(dataset().Filename, '_', formatDateTime(pipeline().TriggerTime, 'yyyyMMddHHmmss'))(加下划线分隔,文件名可读性更强)
- 要么直接修改数据集的
- 验证文件名合法性:确保最终文件名不包含
\ / : * ? " < > |这些禁用字符,长度不超过1024,且不以.或/开头 - 测试流程:修改完成后重新触发管道,检查目标容器中是否生成了命名正确的文件,且复制操作正常完成
额外优化技巧
如果需要保留原文件的扩展名(比如把data.csv改成data_20240520153000.csv),可以用split和last函数提取扩展名后再拼接,表达式如下:
@concat(split(dataset().Filename, '.')[0], '_', formatDateTime(pipeline().TriggerTime, 'yyyyMMddHHmmss'), '.', last(split(dataset().Filename, '.')))
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

