Как заставить Apache Drill анализировать файл JSON с недопустимыми символами UTF8
Я пытаюсь выполнить запрос SELECT над файлом JSON, используя Apache Drill. Я получаю различные ошибки для разных файлов. Все ошибки являются ошибками синтаксического анализа JSON:
Ошибка: DATA_READ ОШИБКА: ошибка синтаксического анализа JSON - Неверный средний байт UTF-8 0x3f
Ошибка: DATA_READ ОШИБКА: Ошибка разбора JSON - Недопустимый символ без кавычек ((CTRL-CHAR, код 13)): необходимо экранировать, используя обратную косую черту, чтобы включить в строковое значение
Ошибка: DATA_READ ОШИБКА: Ошибка анализа JSON - недопустимый символ ((CTRL-CHAR, код 0)): только обычный пробел (\r, \n, \t)
Для первой ошибки, которая связана с наличием определенных символов, таких как '趨勢ç§'技å': я уже попробовал ниже:
- С помощью
Convert_To
а такжеConvert_From
в поле, содержащем недопустимые символы UTF-8 (не работает. Не думайте, что эти функции предназначены для этой цели.) - добавлять
-Dsaffron.default.charset=UTF-16LE
до DRILL_JAVA_OPTS вconf/drill-env.sh
(Не сработало, поскольку выясняется, что эта опция должна использоваться, если ваш запрос, а не ваши данные, содержит недопустимые символы UTF-8) - Изменена кодировка файла на UTF-8 с использованием Notepad++ (не сработало. Хотя ожидалось, что это сработает)
- Попытался изменить кодировку файла на UTF-8 без спецификации с помощью Notepad++ (Notepad++ не смог преобразовать его. После сохранения при повторном открытии это был ANSI)
1 ответ
Измените кодировку на 'UTF-8 с BOM', используя либо:
- Notepad++
- iConv (утилита оболочки)
и вы сможете запросить его с помощью Apache Drill.
Я использовал iConv, чтобы изменить кодировку файла на "UTF-8", когда преобразованный файл был открыт с помощью Notepad++, кодировка, отображаемая в Notepad++, была "UTF-8 с спецификацией". Итак, я изменил кодировку исходного файла на "UTF-8 с BOM", используя сам Notepad++, он тоже работал.
Оба файла, один преобразованный с использованием iConv, а другой преобразованный с помощью Notepad++ (в основном любой файл, преобразованный в 'UTF-8 с BOM'), можно было проанализировать с помощью Apache Drill.
Преобразовать:
- Используя Notepad++: выберите в строке меню кодировку, измените ее на "UTF8 с спецификацией" и сохраните файл. Если эта кодировка не отображается в списке кодировок, возможно, существует какой-либо плагин (или другой способ), чтобы сделать его доступным в Notepad++.
- Использование iConv: загрузите утилиту и запустите ее с помощью этой команды: iconv -f old-encoding -t new-encoding (в нашем случае UTF-8) file.txt > newfile.txt
Примечание. Для больших файлов может потребоваться разделить их перед преобразованием, поскольку в моем случае Notepad++ не смог открыть файл объемом 2 ГБ, а iConv также не смог преобразовать его.