You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ADF将SFTP上传至Azure存储账户的文件统一重命名日期格式?

解决Azure Data Factory中基于原文件名日期格式统一重命名的问题

你可以通过ADF的动态表达式,提取原文件名中的日期部分,判断其格式后转换为目标格式,最终拼接成统一命名的文件名。以下是具体实现方案:

核心动态表达式

适用于固定前缀(如fileName_)的场景:

'fileName_',
    formatDateTime(
        if(
            not(isError(tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'yyyy-MM-dd'))),
            tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'yyyy-MM-dd'),
            tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'dd-MM-yyyy')
        ),
        'yyyyMMdd'
    ),
    '.csv'
)```

如果原文件名的前缀不固定(需保留原前缀),可以使用以下通用表达式:
```@concat(
    split(item().name, '_')[0],
    '_',
    formatDateTime(
        if(
            not(isError(tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'yyyy-MM-dd'))),
            tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'yyyy-MM-dd'),
            tryParseDateTime(split(split(item().name, '_')[1], '.')[0], 'dd-MM-yyyy')
        ),
        'yyyyMMdd'
    ),
    '.csv'
)```

## 表达式拆解说明
- **提取日期字符串**
  `split(split(item().name, '_')[1], '.')[0]`
  先按下划线`_`拆分文件名,取第二部分(包含日期和后缀);再按点`.`拆分,取第一部分得到纯日期字符串(如`25-10-2024`或`2024-10-25`)。

- **判断并解析日期**
  `if(not(isError(tryParseDateTime(..., 'yyyy-MM-dd'))), tryParseDateTime(..., 'yyyy-MM-dd'), tryParseDateTime(..., 'dd-MM-yyyy'))`
  先用`yyyy-MM-dd`格式尝试解析日期,`isError()`判断是否解析成功;如果解析成功(说明是`yyyy-MM-dd`格式),直接使用该日期对象;否则用`dd-MM-yyyy`格式解析。

- **格式化日期为目标格式**
  `formatDateTime(解析后的日期对象, 'yyyyMMdd')`
  将解析后的日期对象转换为`yyyyMMdd`格式的字符串(如`20241025`)。

- **拼接新文件名**
  通过`concat()`函数将前缀、格式化后的日期和后缀`.csv`拼接成最终文件名。

## 使用场景
- **ForEach循环+Rename活动**:先用Get Metadata活动获取SFTP或存储账户中的文件列表,在ForEach活动中遍历每个文件,将上述表达式作为Rename活动的目标文件名。
- **Copy活动Sink端**:如果是通过Copy活动迁移文件,可在Sink的文件名设置中使用该动态表达式,直接生成统一命名的文件。

内容的提问来源于stack exchange,提问作者Kevin Vallot
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:50:08