Я хочу создать набор данных 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)
Для примера я использовал поиск, вы можете использовать действие копирования или другое в соответствии с вашими требованиями.
Большое спасибо за ваш ответ! Позвольте мне проверить это, и я приму это
Я не до конца понял использование @triggerBody().fileName и @triggerBody().folderPath. Откуда они берутся и как заселяются?
Это параметры триггера по умолчанию, которые будут иметь путь к папке с файлом триггера и имя файла. Вы не можете использовать их непосредственно в конвейере. Вы можете передавать их только в любые параметры конвейера и использовать параметры конвейера в конвейере. Вот почему я создал параметры конвейера и передал им значения параметров триггера. Если есть необходимость использования триггерного пути к файлу в конвейере, вы можете использовать эти параметры.
Вы можете проверить этот документ, чтобы узнать больше о триггерах событий хранилища в ADF.
Я следовал инструкциям: кажется, что параметры триггера и конвейера работают должным образом (я использовал действие установки переменной, которое создает переменную со значением some_container/file_name_01012023.csv
), но действие dataset/get_metadata по какой-то причине отказывается извлекать метаданные файла. Это сработало для вас? (для справки я загружаю file_name_01012023.csv в контейнер some_container)
Позвольте мне проверить и обновить ответ, если потребуется.
Давайте продолжим обсуждение в чате.
Ваше требование состоит в том, чтобы запускать конвейер каждый раз, когда загружается файл с указанным выше форматом? Кроме того, вы сказали, что позаботитесь о том, чтобы с этим шаблоном был только один файл, верно?