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

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

Спасибо.


person DrDuran    schedule 07.01.2019    source источник


Ответы (3)


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

В наборе данных определите «Параметры» для пути к папке и/или имени файла (нажмите «+ Создать» и дайте им любое имя, которое вам нравится), например. путь к исходной папке, имя исходного файла.

Затем в наборе данных в разделе «Подключение» включите следующее в определение «Путь к файлу»: @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"
               }
          }
      }
  ]

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

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

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

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

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

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

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

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

person tashb    schedule 07.02.2019

После того, как вы настроили действие копирования и выбрали набор данных 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

person eedwards    schedule 15.01.2019

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

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

person eedwards    schedule 10.01.2019
comment
Функции данных выражений можно найти здесь: docs.microsoft.com/en-us/azure/data-factory/ - person eedwards; 10.01.2019
comment
Спасибо вам обоим, что вернулись. У меня проблемы с соединением этого. Я создал параметр конвейера, который выглядит как - person DrDuran; 14.01.2019
comment
Спасибо вам обоим, что вернулись. У меня проблемы с соединением этого. Я создал параметр конвейера, который выглядит следующим образом: Имя: startTime Тип: String Значение по умолчанию: «1900-01-01T13:00:00Z». Для набора данных у меня есть параметр с именем startTime (нужно ли ему иметь другое имя?) Имя: startTime Тип: String Значение по умолчанию: @startTime Затем, наконец, в приемнике для задания копирования у меня есть параметр StartTime с динамическим содержимым, состоящим из @concat('file1_',formatDateTime(pipeline().parameters.startTime)) Я не новичок в DF, но новичок в выражениях и параметрах. - person DrDuran; 14.01.2019
comment
Я не могу заставить это работать, что мне нужно ввести для значения по умолчанию для параметра конвейера? Приступая к работе с параметрами и выражениями, не так много рекомендаций, я получаю много информации о том, что они делают, но практически ничего о том, как их реализовать. Эдвардс, я пытаюсь следовать вашему примеру, но я не уверен, что делать, когда дело доходит до параметра конвейера. - person DrDuran; 14.01.2019