【问题标题】:Dynamically Append datetime to filename during copy activity or when specifying name in blob dataset在复制活动期间或在 blob 数据集中指定名称时将日期时间动态附加到文件名
【发布时间】:2019-06-02 14:08:10
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: blob azure-data-factory-2 dynamic-content


    【解决方案1】:

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

    在数据集中为文件夹路径和/或文件名定义“参数”(单击“+新建”并为它们提供您喜欢的任何名称),例如源文件夹路径,源文件名。

    然后在“连接”下的数据集中,在“文件路径”定义中包含以下内容: @dataset().sourceFolderPath 和 @dataset().sourceFileName '/' 的任一侧 (见下面的截图)

    在复制管道中,单击管道窗口右上角的“代码”,然后在您希望由动态文件名定义的“blob”对象下查找以下代码 - 它不包含“参数”代码将其添加到 JSON 并单击“完成”按钮 - 在“输入”、“输出”或两者中可能需要此代码,具体取决于您在流程中引用的动态文件 - 以下是输出包含日期的示例文件夹路径和文件名中的参数(日期由触发器参数设置):

      "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

    【讨论】:

      【解决方案2】:

      一旦您设置了复制活动并选择您的 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

      【讨论】:

        【解决方案3】:

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

        要在复制活动中使用,您还需要添加管道参数。

        【讨论】:

        • 表达式数据函数可以在这里找到:docs.microsoft.com/en-us/azure/data-factory/…
        • 感谢您的光临。我很难把这个拼凑起来。我创建了一个管道参数,看起来像
        • 感谢您的光临。我很难把这个拼凑起来。我创建了一个管道参数,看起来像 Name:startTime 类型:String 默认值:'1900-01-01T13:00:00Z' 对于数据集,我有一个名为 startTime 的参数(它需要有不同的名称吗?)名称:startTime 类型:字符串 默认值:@startTime 最后在复制作业的接收器中,我有 StartTime 参数,其中包含由 @concat('file1_',formatDateTime(pipeline().parameters.startTime)) 组成的动态内容对 DF 并不陌生,但对表达式和参数很陌生。
        • 我无法让它工作,我需要为管道参数输入什么默认值?在开始使用参数和表达式时,指导方式并不多,我得到了很多关于它们做什么的信息,但几乎没有关于如何实现它们的信息。 EEdwards,我正在尝试按照您的示例进行操作,但是对于管道参数,我不确定该怎么做。
        猜你喜欢
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多