Мы используем пользовательский экстрактор USQL для выравнивания структуры json. Приведенный ниже пример кода работает нормально, если строка (объект json) json меньше 4 МБ. Если размер строки превышает 4 МБ, мы получаем ошибку «Запись во входном файле длиннее, чем 4194304 байта.» Аналогичный код пробуется в автономном приложении C # для строк, превышающих 4 МБ,это работает отлично. Есть ли у нас какие-либо ограничения на размер json с помощью пользовательского экстрактора usql? Как мы обрабатываем сообщения json размером более 4 МБ?
Ошибка выдается из выделенной строки в следующем коде
string line = lineReader.ReadToEnd ();
Пользовательский экстрактор Пример кода
с использованием Microsoft.Analytics.Interfaces;
с использованием System.Collections.Generic;
с использованием System.IO;
используя System.Text;
используя Microsoft.Analytics.Types.Sql;
используя Newtonsoft.Json;
пространство имен Company.DataLakeAnalytics
{
[SqlUserDefinedExtractor (AtomicFileProcessing= false)]
открытый класс CustomJSONExtractor: IExtractor
{
личное чтение только для шифрования _encoding;
личное чтение только для байта [] _row_delim;
закрытая строка DELIMITER = "~";
открытый CustomJSONExtractor(Кодировка encoding = null, строка row_delim = "\ r \ n")
{
_encoding = Encoding.UTF8;
_row_delim = _encoding.GetBytes (row_delim);
}
//Каждая строка json в необработанном файле является transfoв виде плоской структуры
публичное переопределение IEnumerable Extract (ввод IUnstructuredReader, вывод IUpdatableRow)
{
// Чтение строки ввода построчно
foreach (Поток тока во входном файле. Разделение (_row_delim))
{
using (StreamReader lineReader = new StreamReader (current, this._encoding))
{
// читает всю строку
string line = lineReader.ReadToEnd ();
// разбить строку на несколько переменных
output.Set (1, "A ~ 1");
yield return output.AsReadOnly ();
}
}
}
}
}
образец кода USQL
DECLARE @ INPUT_FILE ="образец-data.txt";@jsonDatafile = EXTRACT ключевая строка, строка jsonObjStr ОТ @INPUT_FILE ИСПОЛЬЗОВАНИЕ new Damen.DataLakeAnalytics.CustomJSONExtractor (null, row_delim: "\ n");@dataJsonObject = ВЫБРАТЬ jsonObjStr AS rawData FROM @dataAsStrings;OUTPUT @dataJsonObject TO @flatenedOutputFile, ИСПОЛЬЗУЯ Outputters.Text (outputHeader: false, цитирование: false, разделитель: '~');