Медленное выполнение задания U-SQL из-за SqlFilterTransformer

У меня есть задание U-SQL, которое извлекает данные из 2 файлов .tsv и 2 .csv, выбирает некоторые функции и выполняет некоторые простые преобразования перед выводом в файлы csv/tsv в ADL.

Однако, когда я пытаюсь добавить дополнительные преобразования в операторы SELECT, кажется, что задание выполняется значительно дольше (10+ минут против 1 минуты), в частности, из-за одного оператора SELECT.

Я считаю, что это связано с вычислением столбца «YearMonth», где я по существу использовал конкатенацию, чтобы получить столбец даты в формате, в котором он мне нужен.

Ниже приведена работа, которая выполняется быстро:

    @StgCrime =
SELECT CrimeID,
       [Month],
       ReportedBy,
       FallsWithin,
       Longitude,
       Latitude,
       Location,
       LSOACode,
       LSOAName,
       CrimeType,
       LastOutcome,
       Context
FROM @ExtCrime;

OUTPUT @StgCrime
   TO "CrimeOutput/Crimes.csv"
     USING Outputters.Csv(outputHeader:true);

И работа, которая занимает намного больше времени:

    @StgCrime =
SELECT CrimeID,
       String.Concat([Month].Substring(0, 4),[Month].Substring(5, 2)) AS YearMonth,
       ReportedBy AS ForceName,
       Longitude,
       Latitude,
       Location,
       LSOACode,
       CrimeType,
       LastOutcome
FROM @ExtCrime;

OUTPUT @StgCrime
   TO @OCrime
     USING Outputters.Csv(outputHeader:true);

Разница в представлении Vertex:

Простая/быстрая работа

С дополнительным преобразованием

Может ли кто-нибудь помочь прояснить это для меня? Конечно, одно преобразование не должно вызывать такого увеличения времени выполнения задания?

Запрашиваемый файл данных состоит из 1066 CSV-файлов общим размером около 2,5 ГБ.


person Matt Lakin    schedule 17.04.2018    source источник
comment
Большинству людей здесь нужен форматированный текст, а не изображения (или ссылки на изображения).   -  person jarlh    schedule 17.04.2018
comment
@jarlh спасибо за совет - сейчас исправлено. Можно сказать, это мой первый пост!   -  person Matt Lakin    schedule 17.04.2018
comment
Теперь выглядит намного лучше!   -  person jarlh    schedule 17.04.2018
comment
Это может иметь смысл. Проверьте, сколько еще осталось String.Concat локально в приложении C#. Без String.Concat все столбцы просто проходят. Существует слишком много способов оптимизировать сквозную передачу.   -  person qxg    schedule 18.04.2018


Ответы (1)


Не видя всего сценария и сгенерированного графа заданий, а также количества указанных AU, немного сложно оценить, почему одно задание выполнялось настолько медленнее, чем другое.

Вы говорите, что «файл данных» состоит из 1066 файлов CSV, каждый из которых кажется довольно маленьким, всего 2,5 ГБ. Я ожидаю, что вы, вероятно, получите 1066 извлеченных вершин на этапе извлечения. То же самое и для простой работы?

У нас есть новая функция в предварительной версии, которая будет группировать до 200 файлов (или 1 ГБ, что наступит раньше) в одну вершину, чтобы минимизировать время запуска вершины.

Можете ли вы попробовать свою работу с добавлением следующего утверждения:

SET @@FeaturePreviews = "InputFileGrouping:on";
person Michael Rys    schedule 19.04.2018