在复制 activity 期间或在 blob 数据集中指定名称时将日期时间动态附加到文件名

Dynamically Append datetime to filename during copy activity or when specifying name in blob dataset

我正在将文件保存到数据工厂 V2 中的 blob 存储,当我指定要保存到的位置时,我正在调用文件(例如)file1,它在 blob 中保存为 file1,没问题。但是我可以使用动态内容功能将日期时间附加到文件名,使其类似于 file1_01-07-2019_14-30-00 吗?(1 月 7 日 14:30:00 以防阅读起来很尴尬)。或者,我可以将 webhook activity 的结果(文件名)输出到下一个 activity(函数)吗?

谢谢。

您可以添加数据集参数,例如 WindowStartTime,其格式为 2019-01-10T13:50:04.279Z。然后你会得到类似下面的动态文件名: @concat('file1_', formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss')).

要在副本中使用 activity 您还需要添加管道参数。

一旦你设置了副本 activity 并且 select 你将 blob 数据集作为接收器,你需要为 WindowStartTime 输入一个值,这可以只是一个时间戳,例如1900-01-01T13:00:00Z 或者您可以将管道参数放入其中。

如果您正在设置计划触发器,那么拥有一个参数可能会更有帮助,因为您将能够在触发器运行时输入此 WindowStartTime 时间戳。为此,您可以使用@trigger().scheduledTime 作为触发器参数WindowStartTime 的值。 https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipeline-execution-triggers#trigger-type-comparison

如果不直接编辑复制管道 JSON 文件,我无法使它工作(2018 年末 - 可能不再需要)。您需要复制管道中的动态代码 JSON 和数据集中定义的设置以设置文件名参数。

在数据集中为文件夹路径 and/or 文件名定义 'Parameters'(单击“+ 新建”并给它们任意名称)例如sourceFolderPath, sourceFileName.

然后在 'Connection' 下的数据集中,在 'File path' 定义中包含以下内容: @dataset().sourceFolderPath 和 @dataset().sourceFileName 在“/”的任一侧 (见下方截图)

在复制管道中单击管道 window 右上角的 'Code' 并在要由动态文件名定义的 'blob' 对象下查找以下代码 -如果不包含 'parameters' 代码,请将其添加到 JSON 并单击 'Finish' 按钮 - 'inputs'、'outputs' 或两者都可能需要此代码取决于您在流程中引用的动态文件 - 下面是一个示例,其中输出在文件夹路径和文件名中都包含日期参数(日期由触发器参数设置):

  "inputs": [
     {
        "referenceName": "tmpDataForImportParticipants",
        "type": "DatasetReference"
     }
  ],
  "outputs": [
      {
         "referenceName": "StgParticipants",
         "type": "DatasetReference",
         "parameters": {
              "sourceFolderPath": {
                   "value": <derived value of folder path>,
                   "type": "Expression"
               },
               "sourceFileName": {
                    "value": <derived file name>,
                    "type": "Expression"
               }
          }
      }
  ]

文件夹路径的派生值可能类似于以下内容 - 这导致指定 blobContainer 中的文件夹路径 yyyy/mm/dd:

"blobContainer/@{formatDateTime(pipeline().parameters.windowStart,'yyyy')}/@{formatDateTime(pipeline().parameters.windowStart,'MM')}/@{formatDateTime(pipeline().parameters.windowStart,'dd')}"

或者它可以被硬编码,例如"blobContainer/directoryPath" - 不要在定义的开头或结尾包含“/”

派生文件名可能类似于以下内容:

"@concat(string(pipeline().parameters.'_',formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss'))>,'.txt')"

您可以包含触发器设置的任何参数,例如通过包含 pipeline().parameters.

的 ID 值、帐户名称等

Dynamic Dataset Parameters example

Dynamic Dataset Connection example