Динамически добавлять дату и время к имени файла во время копирования или при указании имени в наборе данных BLOB-объектов

Я сохраняю файл в хранилище BLOB-объектов в фабрике данных V2, когда я указываю место для сохранения, я вызываю файл (например) file1, и он сохраняется в BLOB-файле как file1, нет проблем. Но могу ли я использовать функцию динамического содержимого, чтобы добавить дату и время к имени файла, так что это будет что-то вроде file1_01-07-2019_14-30-00?(7 января 14:30:00 на всякий случай, если его неудобно читать). В качестве альтернативы, можно ли вывести результат (имя файла) действия webhook для следующего действия (функции)?

Спасибо.

3 ответа

Решение

Я не мог заставить это работать без непосредственного редактирования JSON-файла конвейера копирования (конец 2018 года - может больше не понадобиться). Вам нужен динамический код в конвейере копирования JSON и параметры, определенные в наборе данных для настройки параметров имени файла.

В наборе данных определите "Параметры" для пути к папке и / или имени файла (нажмите "+" и дайте им любое имя), например, sourceFolderPath, sourceFileName.

Затем в наборе данных в разделе "Соединение" включите следующее в определение "Путь к файлу": @dataset(). SourceFolderPath и @dataset (). SourceFileName по обе стороны от "/" (см. Скриншот ниже).

В конвейере копирования нажмите "Код" в верхнем правом углу окна конвейера и найдите следующий код в объекте "blob", который вы хотите определить динамическим именем файла - если код "параметров" не включен, добавьте его в JSON и нажмите кнопку "Готово" - этот код может понадобиться во "входах", "выходах" или в обоих случаях в зависимости от динамических файлов, на которые вы ссылаетесь в своем потоке - ниже приведен пример, в котором выходные данные включают параметр даты в обоих путь к папке и имя файла (дата задается параметром Trigger):

  "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"
               }
          }
      }
  ]

Полученное значение пути к папке может быть примерно таким - это приводит к пути к папке yyyy/mm/dd в указанном blobContainer:

"BlobContainer/@{FormatDateTime(трубопровод (). Parameters.windowStart,'YYYY')}/ {@ FormatDateTime(трубопровод (). Parameters.windowStart,'ММ')}/ {@ FormatDateTime(трубопровод (). Parameters.windowStart,'дд')}"

или это может быть жестко закодировано, например, "blobContainer/directoryPath" - не включайте "/" в начале или конце определения

Полученное имя файла может выглядеть примерно так:

"@concat (string (pipe (). параметры.'_',formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss'))>,'.txt')"

Вы можете включить любой параметр, установленный триггером, например, значение идентификатора, имя учетной записи и т. Д., Включив параметры pipe ().

Пример параметров динамического набора данных

Пример подключения динамического набора данных

После настройки действия копирования и выбора набора данных BLOB-объектов в качестве приемника вам нужно ввести значение для WindowStartTime, это может быть либо просто временная метка, например, 1900-01-01T13:00:00Z, либо вы можете вставить параметр трубопровода в это.

Наличие параметра может быть более полезным, если вы настраиваете триггер расписания, поскольку вы сможете ввести эту метку времени WindowStartTime к моменту запуска триггера. Для этого вы должны использовать @trigger (). ScheduleTime в качестве значения для параметра триггера WindowStartTime. https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipeline-execution-triggers

Вы можете добавить параметр набора данных, например WindowStartTime, в формате 2019-01-10T13:50:04.279Z. Тогда у вас будет что-то вроде ниже для динамического имени файла: @concat('file1_', formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss')).

Для использования в операции копирования вам также необходимо добавить параметр конвейера.

Другие вопросы по тегам