Phoenix -> csv -> неверный символ между инкапсулированным токеном и разделителем - PullRequest
0 голосов
/ 28 января 2020

Мне нужно загрузить файл дампа CSV в базу данных Phoenix

Файлы, которые не содержали специальных символов, были загружены без проблем

./psql.py -t TTT localhost /home/isaev/output.csv -d';'

Но как только я попытался загрузить тот же файл, в котором поля данных встречались с кавычками, я получаю сообщение об ошибке

java.lang.RuntimeException: java.io.IOException: (line 1) invalid char between encapsulated token and delimiter
    at org.apache.commons.csv.CSVParser$1.getNextRecord(CSVParser.java:398)
    at org.apache.commons.csv.CSVParser$1.hasNext(CSVParser.java:407)
    at org.apache.phoenix.util.UpsertExecutor.execute(UpsertExecutor.java:132)
    at org.apache.phoenix.util.CSVCommonsLoader.upsert(CSVCommonsLoader.java:217)
    at org.apache.phoenix.util.CSVCommonsLoader.upsert(CSVCommonsLoader.java:182)
    at org.apache.phoenix.util.PhoenixRuntime.main(PhoenixRuntime.java:308)
Caused by: java.io.IOException: (line 1) invalid char between encapsulated token and delimiter
    at org.apache.commons.csv.Lexer.parseEncapsulatedToken(Lexer.java:275)
    at org.apache.commons.csv.Lexer.nextToken(Lexer.java:152)
    at org.apache.commons.csv.CSVParser.nextRecord(CSVParser.java:450)
    at org.apache.commons.csv.CSVParser$1.getNextRecord(CSVParser.java:395)
    ... 5 more

Например, в первой строке (строка 1) у меня есть эта запись

5863355029; 007320071; ЗАО "С улыбкой на всю жизнь"; Правда;


Я сам нашел решение: -q '\' Может кому-нибудь пригодится

1 Ответ

0 голосов
/ 28 января 2020

Вы можете решить вашу проблему, используя кавычки 2 раза:

5863355029;007320071; ZAO ""With a smile for life"";True;

Каждое поле может быть или не быть заключено в двойные кавычки. Если поля не заключены в двойные кавычки, то двойные кавычки могут не отображаться внутри полей.

Проверьте эту ссылку, если вас интересует, почему: https://www.marklogic.com/blog/delimited_text_mlcp/

...