У меня есть задание 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 ГБ.
String.Concat
локально в приложении C#. БезString.Concat
все столбцы просто проходят. Существует слишком много способов оптимизировать сквозную передачу. - person qxg   schedule 18.04.2018