副本中的正则表达式附加列 Activity Azure 数据工厂

Regex Additional Column in Copy Activity Azure Data Factory

我正在尝试解析复制 Activity 的“其他列”部分中的 $$FILEPATH 值。

文件路径的格式为:time_period=202105/part-12345.parquet。我只想要文件路径的“202105”部分。我无法对其进行硬编码,因为还有其他 time_period 个文件夹。

我试过 this(来自下面的 link):@{substring($$FILEPATH, add(indexOf($$FILEPATH, '='),1),sub(indexOf($$FILEPATH, '/'),6))} 但我收到一条错误消息 Unrecognized expression: $$FILEPATH

我能想到的唯一其他事情是使用:1) 获取元数据 Activity + 对于每个 Activity 或 2) 可能尝试在 DataFlow

中执行此操作

$$FILEPATH是保存文件路径的保留变量。您不能使用 $$FILEPATH.

添加动态表达式

您必须创建一个变量来根据需要存储文件夹名称,然后在附加列中动态传递它。

下面是我试过的。

  1. 由于您的文件夹名称不是静态的,因此使用 Get Metadata activity.
  2. 获取文件夹名称

获取元数据输出:

  1. 将输出传递给 ForEach activity 以循环所有文件夹。

  1. 在管道级别添加一个变量来存储文件夹名称。

  1. ForEachactivity中添加set variableactivity从文件夹名称中提取日期部分并将值添加到变量。

    @substring(item().name, add(indexof(item().name, '='),1), sub(length(item().name), add(indexof(item().name, '='),1)))
    

设置变量的输出:

  1. 源数据集中,参数化path/filename以动态传递它们。

  1. 在设置变量和 select 源数据集之后添加 copy data activity。

a) 将 ForEach activity 的 当前项目名称 作为文件路径传递。在这里,我将文件名硬编码为 *.parquet 以从该路径复制所有文件(这仅在所有文件具有相同结构时有效)。

b) 在附加列下,添加一个新列,为新列命名,在值下,select 到 添加动态内容 并添加现有变量。

  1. 在复制数据接收器中添加接收器数据集。我添加了 Azure SQL table 作为我的接收器。

  1. Mapping 中,将文件名(新列)添加到映射中。

  1. 当你运行管道时,ForEachactivity运行s Get Metadataactivity中的项目数activity。

输出: