#mysql #node.js #csv #export-to-csv #node-csv-parse
#mysql #node.js #csv #экспорт в csv #узел-csv-parse
Вопрос:
Я экспортирую поле описания из базы данных mysql:
SELECT REPLACE(description, char(13), '\n')
FROM table u INTO OUTFILE '/var/lib/mysql-files/u.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n';
Затем в nodejs я обрабатываю файл с помощью csv-parse (должен использовать этот, поскольку он обрабатывает асинхронность):
const parse = promisify(require('csv-parse'));
const records = await parse(fileContents, { delimiter: ',', columns: true, skip_empty_lines: true, record_delimiter: "n" });
Вот пример текста:
Married, mad scientist and tennisman from Germany. I might not be able
to spell the word "ubuntu" without spellcheck software, but be sure I
know the meaning.
Однако анализатор ошибается, разделите его на 3 поля:
'"Married, mad scientist and tennisman from Germany. I might not be
able to spell the word \"ubuntu\" without spellcheck software',
'but be sure I know the meaning."',
'\N'
3-е поле поступает из mysql, по какой-то причине файл сохраняется с этим N в конце вместо n .
Я могу удалить его с помощью sed, а также запятой в конце строки, хотя некоторые советы всегда приветствуются, если мой запрос может избежать этого.
Однако для разделения основного текста на 2 поля я озадачен. Я попытался удалить параметр разделителя в parse, но та же проблема. Я попробовал расслабиться: правда, то же самое.
Есть идеи, что я делаю не так?
Комментарии:
1. Почему экспорт в CSV, вы не можете подключиться к БД напрямую с узла?
2. Я экспортирую очень большие таблицы в csv, чтобы я мог загружать в firestore (nosql), и это лучший способ, который я нашел.