Анализ выходных данных SELECT INTO OUTFILE

Я пытаюсь проанализировать вывод CSV SELECT INTO OUTFILE. (Цель заключается в массовой загрузке данных во внешнюю базу данных NoSQL; для массового загрузчика требуется определенный формат файла, поэтому я пишу генератор)

Моя главная проблема - обработка экранированных символов, в частности, символа FIELDS TERMINATED BY. MySQL, похоже, не экранирует разделитель, когда он встречается в значении столбца.

Параметры экспорта моего запроса следующие:

FIELDS
    TERMINATED BY ','
    ENCLOSED BY '"'
    ESCAPED BY '\\'
LINES
    TERMINATED BY '\n'

Я получаю строки CSV, такие как:

"value1","some, value","another value","value3"

Это разбивает мой анализатор строк CSV, который просто разбивает строку, используя символ FIELDS TERMINATED BY.

т.е. мой парсер выдает следующие значения столбца:

  • value1
  • немного
  • значение
  • другое значение
  • value3

"some" и "value" должны были быть проанализированы как целая строка "some, value"

Как правильно проанализировать вывод SELECT INTO OUTFILE?

Что-нибудь еще, о чем я должен волноваться, учитывая параметры экспорта выше? Мой код уже обрабатывает следующие случаи в пределах значения столбца:

(в точном порядке)

  • Обрабатывать значение столбца \N как NULL
  • Заменить "

Замечания:

Если кто-нибудь может предоставить псевдокод MySQL LOAD DATA INFILE, это было бы замечательно. Точное поведение этого утверждения - то, что я пытаюсь подражать.

Замечания:

Мой парсер написан на Java, но я могу лучше понимать PHP

1 ответ

Я закончил с использованием OpenCSV; хотя мне пришлось написать специальный обработчик для значения NULL, который MySQL выводит как "\N". К счастью, в моей схеме нет пустых строковых полей, поэтому я могу с уверенностью предположить, что все вхождения "\ N" равны NULL.

Спасибо @Doge за напоминание не изобретать велосипед:)

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