Анализ выходных данных 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 за напоминание не изобретать велосипед:)