Я получаю текстовый файл (на сегодняшнюю дату) со вчерашней датой в нем, и я хочу динамически получать это имя файла в моем конвейере фабрики данных.

Файл автоматически помещается в файловую систему, и я хочу скопировать этот файл в хранилище больших двоичных объектов. В моем примере ниже я имитирую это путем копирования из большого двоичного объекта в большой двоичный объект.

Например: 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"

}
}
0
Amedo 12 Мар 2018 в 20:05

2 ответа

Лучший ответ

Вы можете использовать EndOfInterval вместо StartOfInterval в политике. Это будет использовать конец дня вместо начала дня для выполнения. Вы также можете установить соответствующее смещение, если файл недоступен в полночь.

2
gbellmann 12 Мар 2018 в 20:56

В 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 Всегда иметь одну и ту же дату, когда, например, трубопровод выйдет из строя. Но помните, что это доступно только в области действия триггера. В моих тестах он оценивался только для триггера расписания.

2
wolszakp 16 Мар 2018 в 08:12