【问题标题】:Azure Data Factory copy pipeline: get a file with date of yesterday that arrived todayAzure 数据工厂复制管道:获取今天到达的昨天日期的文件
【发布时间】:2018-06-18 06:14:47
【问题描述】:

我正在获取一个包含昨天日期的 txt 文件(在今天的日期),我想在我的数据工厂管道中动态获取此文件名。

该文件自动放置在文件系统上,我想将此文件复制到 blob 存储区 在下面的示例中,我通过从 blob 复制到 blob 来模拟这一点。

例如: filename_2018-02-11.txt 今天(2018-03-12)到达昨天(2018-02-11)的日期。我怎样才能在今天取到这个文件? 昨天的切片确实运行了,但还没有文件。

这是我的例子:

 {"$schema": "http://datafactories.schema.management.azure.com/schemas/2015-09-01/Microsoft.DataFactory.Pipeline.json",
"name": "CopyPipeline-fromBlobToBlob",
"properties": {
"activities": [
  {
    "type": "Copy",
    "typeProperties": {
      "source": {
        "type": "BlobSource",
        "recursive": true
      },
      "sink": {
        "type": "BlobSink",
        "copyBehavior": "",
        "writeBatchSize": 0,
        "writeBatchTimeout": "00:00:00"
      },
      "enableSkipIncompatibleRow": true
    },
    "inputs": [
      {
        "name": "InputDataset-1"
      }
    ],
    "outputs": [
      {
        "name": "OutputDataset-1"
      }
    ],
    "policy": {
      "timeout": "1.00:00:00",
      "concurrency": 1,
      "executionPriorityOrder": "NewestFirst",
      "style": "StartOfInterval",
      "retry": 3,
      "longRetry": 0,
      "longRetryInterval": "00:00:00"
    },
    "scheduler": {
      "frequency": "Day",
      "interval": 1,
      "offset": "05:00:00"
    },
    "name": "activity_00"
  }
],
"start": "2018-03-07T00:00:00Z",
"end": "2020-03-08T00:00:00Z",
"isPaused": false,
"pipelineMode": "Scheduled"

}
}

【问题讨论】:

  • 不能重新运行切片?
  • @SimonZeinstra 是否有自动重新运行切片的选项?或者只是手动可能?如果有可能对我有用的自动化解决方案。
  • 不是来自数据工厂本身,它需要一些编码。可以使用 PowerShell 或任何可以与数据工厂 API 对话的工具重新运行切片。

标签: azure azure-data-factory


【解决方案1】:

您可以在策略中使用 EndOfInterval 代替 StartOfInterval。这将使用一天的结束而不是一天的开始来执行执行。如果文件在午夜不可用,您可能还需要设置适当的偏移量。

【讨论】:

  • 谢谢!! EndOfInterval 帮助了我。我一直在 5:00 使用偏移量,因此我的管道将在第二天 5:00 运行。我也在使用 longretry 5,以便我尝试检查文件是否已到达。这里的调用是在文件存在之前我会收到错误消息......
【解决方案2】:

在 ADF v2 中,您可以使用内置变量 (@pipeline().TriggerTime):

https://docs.microsoft.com/en-us/azure/data-factory/control-flow-system-variables

并在源数据集 (InputDataset-1) 中将文件路径/文件名如下所示:

@concat('YOUR BASE PATH IN BLOB/', 'filename_', addhours(pipeline().TriggerTime, -1, 'yyyy'), '-', addhours(pipeline().TriggerTime, -1, 'MM'), '-', addhours(pipeline().TriggerTime, -1, 'dd'), '.txt'))

您也可以使用@trigger().scheduledTime 总是有相同的日期,例如管道将失败。 但请记住,它仅在触发器范围内可用。 在我的测试中,它只针对计划触发器进行了评估。

【讨论】:

  • 谢谢,这个解决方案是关于 DF v2 的吗?我目前正在使用数据工厂 v1。
  • 是的,这适用于 DF v2。
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多