Я пытался использовать Azure Data Lake Analytics для анализа большой группы файлов журналов IIS. Пока я могу заставить это работать для одного файла в лучшем случае, используя что-то вроде этого:
@results =
EXTRACT
s_date DateTime,
s_time string,
s_ip string,
cs_method string,
cs_uristem string,
cs_uriquery string,
s_port int,
cs_username string,
c_ip string,
cs_useragent string,
sc_status int,
sc_substatus int,
sc_win32status int,
s_timetaken int
FROM @"/input/u_ex151115.log"
USING Extractors.Text(delimiter:' ', skipFirstNRows: 4);
@statuscount = SELECT COUNT(*) AS TheCount,
sc_status
FROM @results
GROUP BY sc_status;
OUTPUT @statuscount
TO @"/output/statuscount_results.tsv"
USING Outputters.Tsv();
Как видите, в операторе EXTRACT
я пропускаю заголовок файла журнала IIS, используя атрибут skipFirstNRows
. Проблема, с которой я сталкиваюсь, заключается в том, что многие файлы журналов, которые я использую в качестве входных данных, содержат заголовки в середине файла, предположительно потому, что пул приложений IIS перезапустился в какой-то момент в течение дня. Когда я пытаюсь включить эти файлы в свой запрос, я получаю следующую ошибку:
Unexpected number of columns in input record at line 14. Expected 14 columns, processed 6 columns out of 6.
Ошибка ссылается на место где-то в файле, где она встретила текст заголовка.
Мой вопрос в том, что с помощью экстрактора текста есть ли способ направить его на пропуск обработки строки на основе начального символа строки или чего-то подобного? Или мне нужно будет написать собственный экстрактор для этого?