Фабрика данных Azure (ADF), создайте набор данных CSV с динамическим путем к файлу

Я хочу создать набор данных csv, который будет выбирать файл с именем, соответствующим шаблону, например file_name_ddmmyyyy: имя_файла_01012023.csv или имя_файла_01012024

Достаточно проверить, начинается ли имя файла с имя_файла_.

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

Я могу себе представить, что вопрос заключается в следующем: что должен делать adf, когда подойдет более одного файла этого формата. Что я могу сказать на данный момент, так это то, что на данный момент я позабочусь о том, чтобы там был только один файл с этим шаблоном имени файла.


57
1

Ответ:

Решено

Для этого требования вы можете использовать триггер событий хранилища в ADF.

Сначала создайте два параметра строкового типа в разделе параметров конвейера и не присваивайте им значений по умолчанию.

Далее перейдите к триггерам -> новый и создайте триггер, как показано ниже.

Если хотите, можете проверить все контейнеры.

Затем передайте параметры триггера @triggerBody().folderPath и @triggerBody().fileName в созданные параметры конвейера.

Этот триггер запускает конвейер всякий раз, когда файл с шаблоном file_name*.csv загружается или изменяется.

Чтобы убедиться, что запускаемый файл имеет правильный шаблон, используйте if Activity в конвейере с выражением ниже.

@and(equals(length(split(split(pipeline().parameters.filename,'_')[2],'.')[0]),8),contains(split(split(pipeline().parameters.filename,'_')[2],'.')[0],'20'))

Внутри истинных действий If используйте свои действия для использования файла. Чтобы динамически получать путь к файлу в наборе данных, вы можете использовать параметры набора данных. В наборе данных создайте строковый параметр в разделе параметров без какого-либо значения.

В динамическом выражении имени файла используйте этот параметр @dataset().<parameter_name>.

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

@concat(pipeline().parameters.folderpath,'/',pipeline().parameters.filename)

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


Интересные вопросы для изучения