从 adls 复制到 adls 时重命名复制活动中的文件

Renaming files in the copy activity while copying from adls to adls

提问人:Bindu 提问时间:11/15/2023 最后编辑:AswinBindu 更新时间:11/16/2023 访问量:43

问:

我有一个 adf 管道,它将数据从 ssms 表复制到名为 stage 的 adls 文件夹。 我有另一个管道,它使用复制活动将文件从 adls 阶段复制到 adls dest

但是我想在复制到 dest 文件夹时重命名文件

例如:如果我在舞台上的文件名具有以下名称:

20231115023654DLondon_00001.csv

所以基本上前 14 个字符是时间戳,然后是加载类型,这里是增量加载和表名,然后是分区(始终是 5 位数字,范围从 00000 到 99999)

我希望 dest 中的文件名是:

20231115023655DLondon.csv

这里发生的事情是下划线后面的数字与文件名的 hhmmss 相加,然后下划线和下划线后的 5 位数字被删除

我应该在复制活动的接收器数据集的文件名中编写什么查询?

我尝试使用以下查询:

@concat(substring (dataset(). Renamed_FL, 0, indexOf(dataset(). Renamed_FL, '__)),
string(add(int (substring(dataset(). Renamed_FL, indexOf(dataset().
Renamed_FL, `_'),5)), int(substring(dataset(). Renamed_FL,8,6)))),'.csv')

当管道运行时,它给了我一个错误: 函数“int”是使用无效的参数调用的。该值无法转换为目标类型

复制 azure-data-factory azure-data-lake-gen2

评论


答:

0赞 Aswin 11/15/2023 #1

在表达式中,结果值不是字符串。子字符串函数的输出从下划线开始。因此,它会导致错误。要克服此错误并满足您的要求,您可以使用以下表达式。(int (substring(dataset(). Renamed_FL, indexOf(dataset().Renamed_FL, '_'),5))_

@concat(substring(dataset().Renamed_FL, 0, 8),substring(concat('000000',string(add(int(substring(dataset().Renamed_FL,9,6)),
int(substring(dataset().Renamed_FL, add(indexOf(dataset().Renamed_FL,'_'),1),5))))),
sub(length(concat('000000',string(add(int(substring(dataset().Renamed_FL,9,6)),
int(substring(dataset().Renamed_FL, add(indexOf(dataset().Renamed_FL,'_'),1),5)))))),6),6),'.csv')
  • substring(dataset().Renamed_FL, 0, 8):这将提取原始文件名的前 8 个字符。
  • substring(concat('000000',string(add(int(substring(dataset().Renamed_FL,9,6)), int(substring(dataset().Renamed_FL, add(indexOf(dataset().Renamed_FL,'_'),1),5)))))), sub(length(concat('000000',string(add(int(substring(dataset().Renamed_FL,9,6)), int(substring(dataset().Renamed_FL, add(indexOf(dataset().Renamed_FL,'_'),1),5)))))),6),6):这将提取出现在原始文件名中下划线字符之后的字符序列(5 位数字)。表达式将此序列号添加到文件名中表示的 6 位数字(表示为字符串)中。结果是一个字符串,表示新的序列号,该序列号最初填充为零,因此它看起来像一个 6 位字符串。hhmmss
  • '.csv':这是一个字符串,表示新文件的文件扩展名。

上述所有部分都使用函数连接在一起以创建新文件名。concat

此表达式在设置变量活动和输出中测试,如下所示。enter image description here

enter image description here

评论

0赞 Aswin 12/14/2023
你试过解决方案了吗?