Как заставить 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 также не смог преобразовать его.

Другие вопросы по тегам