Настроить динамическое количество параметров в конвейере фабрики данных Azure на основе интервалов?

В нашем случае использования требуется, чтобы настраиваемые входные данные передавались в скрипт U-SQL через Фабрику данных Azure. Мы оцениваем осуществимость, и нам необходимо автоматизировать количество переменных, передаваемых в сценарий U-SQL, в зависимости от интервала временного интервала для действия.

Например, если сценарий U-SQL должен запускаться каждые 4 часа, ему потребуется считывать данные из 4 разных файлов, по одному на каждый час. Если интервал изменен на 5 часов, нам нужно автоматизировать это, чтобы он автоматически читал из 5 разных файлов без необходимости обновлять скрипт U-SQL.

Путь к файлу будет иметь следующий формат: Источник\ГГГГ-ММ-ДД\чч.csv

Достижима ли такая динамичность с текущими возможностями и набором функций, предоставляемых фабрикой данных или озером данных? Или есть обходной путь для автоматизации развертывания конвейера фабрики данных?


person Tayyab Anwar    schedule 17.08.2016    source источник


Ответы (1)


Если файлы имеют одинаковую схему, вы можете использовать возможность набора файлов в U-SQL следующим образом:

DECLARE @begin_date DateTime = DateTime.Parse("....");
DECLARE @end_date DateTime = DateTime.Parse("....");

@data = 
  EXTRACT filedate DateTime, // insert rest of your schema
  FROM "/Source/{filedate:yyyy}-{filedate:MM}-{filedate:dd}/{filedate:hh}.csv"
  USING Extractors.Csv();

@data = 
  SELECT * 
  FROM @data
  WHERE filedate BETWEEN @begin_date AND @end_date;

// ... rest of script ...

Приведенный выше код будет обращаться только к файлам, которые удовлетворяют предикату filedate, и не будет читать другие файлы.

Затем вы используете возможности параметризации ADF для параметризации @begin_date и @end_date, чтобы задать нужный вам интервал.

person Michael Rys    schedule 17.08.2016
comment
То есть извлекать все данные из источника и фильтровать за нужный интервал? - person Jamil; 18.08.2016
comment
Это означает извлечение всех данных из указанного интервала. Предикат фактически будет использоваться только для доступа к файлам, которые удовлетворяют предикату... добавленному выше, чтобы было понятно. - person Michael Rys; 18.08.2016
comment
Я использовал приведенный выше код и указал следующий интервал: ГДЕ дата файла МЕЖДУ Convert.ToDateTime(2016-08-17T06) И Convert.ToDateTime(2016-08-17T10); Папка 2016-08-17 содержит 18 файлов и код выше, который должен читать файлы между 06 и 10. Но когда я запускаю свою работу, он пытается извлечь все файлы, присутствующие в исходной папке. - person Jamil; 19.08.2016
comment
Мы поддерживаем только некоторые выражения для сворачивания констант и удаления разделов/файлов. Похоже, что Convert.ToDateTime в настоящее время не приводит к удалению файлов. Пожалуйста, используйте DateTime.Parse вместо этого. Я подал запрос на добавление констант Convert on в поддерживаемые выражения. - person Michael Rys; 19.08.2016
comment
Это может сделать только Тайяб. - person Jamil; 24.08.2016