Я хочу создать набор данных csv, который будет выбирать файл с именем, соответствующим шаблону, например file_name_ddmmyyyy: имя_файла_01012023.csv или имя_файла_01012024
Достаточно проверить, начинается ли имя файла с имя_файла_.
Я хочу извлечь метаданные этого файла и продолжить дальнейшую проверку. Позже я хотел бы создать триггер, который будет запускать конвейер всякий раз, когда файл с этим именем поступает в контейнер хранилища BLOB-объектов.
Я могу себе представить, что вопрос заключается в следующем: что должен делать adf, когда подойдет более одного файла этого формата. Что я могу сказать на данный момент, так это то, что на данный момент я позабочусь о том, чтобы там был только один файл с этим шаблоном имени файла.
Для этого требования вы можете использовать триггер событий хранилища в 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)
Для примера я использовал поиск, вы можете использовать действие копирования или другое в соответствии с вашими требованиями.