У меня есть сценарий USQL и экстрактор CSV для загрузки моих файлов. Однако в течение нескольких месяцев файлы могут содержать 4 столбца, а несколько месяцев они могут содержать 5 столбцов.Обработка файлов с различными столбцами в USQL
Если я настроил свой экстрактор со списком столбцов для 4 или 5 полей, я получаю сообщение об ожидаемой ширине файла. Перейдите проверки разделителей и т. Д. Не удивительно.
Какова работа с этой проблемой, пожалуйста, при условии, что USQL все еще находится в новичке и не хватает какой-либо базовой обработки ошибок?
Я пробовал использовать предложение о отключении в экстракторе, чтобы игнорировать более широкие столбцы, которые удобны для 4 столбцов. Затем получаем количество строк набора строк с условием IF, которое затем имеет экстрактор для 5 столбцов. Однако это приводит к тому, что мир переменных набора строк не используется как скалярные переменные в выражении IF.
Кроме того, я попробовал подсчет стиля C# и sizeof (@ AttemptExtractWith4Cols). Ни одна из них не работает.
Фрагмент кода, чтобы дать вам почувствовать подход я везу:
DECLARE @SomeFilePath string = @"/MonthlyFile.csv";
@AttemptExtractWith4Cols =
EXTRACT Col1 string,
Col2 string,
Col3 string,
Col4 string
FROM @SomeFilePath
USING Extractors.Csv(silent : true); //can't be good.
//can't assign rowset to scalar variable!
DECLARE @RowSetCount int = (SELECT COUNT(*) FROM @AttemptExtractWith4Cols);
//tells me @AttemptExtractWith4Cols doesn't exist in the current context!
DECLARE @RowSetCount int = @AttemptExtractWith4Cols.Count();
IF (@RowSetCount == 0) THEN
@AttemptExtractWith5Cols =
EXTRACT Col1 string,
Col2 string,
Col3 string,
Col4 string,
Col5 string
FROM @SomeFilePath
USING Extractors.Csv(); //not silent
END;
//etc
Конечно, если есть такая вещь, как TRY CATCH блока в USQL это было бы намного проще.
Это даже разумный подход?
Любой вход был бы оценен.
Спасибо за ваше время.
Спасибо, Майк, я посмотрю. –