Как загрузить CSV с пустой ячейкой в ​​KDB? - PullRequest
0 голосов
/ 22 апреля 2020

Как загрузить CSV без символов между разделителями? Смотри 2-й ряд. dd загружается в symbolCol, а не stringCol

$cat kdb.log
longCol"floatCol"symbolCol"stringCol
1"4"b"bb
2"5""dd

Я загружаю с использованием

tab:("JFSS";enlist "\"") 0: `$"/home/..../kdb.log"

, а dd загружается в SymbolCol, а не stringCol

q)tab
longCol floatCol symbolCol stringCol
------------------------------------
1       4        b         bb      
2       5        dd                
q)tab[`symbolCol]
`b`dd

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

На самом деле это выглядит как ошибка в парсере, которую стоит поднять с командой Kx. Использование " в качестве разделителя довольно редко, поэтому они, вероятно, не учитывают это.

Единственный способ обойти это - заменить " на лучший разделитель. В идеале вы должны изменить разделитель вне kdb, но если вам нужно сделать это в kdb, вы можете сделать:

q)("JFSS";enlist",") 0: ssr[;"\"";","]each read0`$":/home/..../kdb.log"
longCol floatCol symbolCol stringCol
------------------------------------
1       4        b         bb
2       5                  dd
q)

Использовать разделитель, который никогда не появится в файле.

0 голосов
/ 23 апреля 2020

Поддержка KDB посоветовал этот код. kdb + использует двойные кавычки для обнаружения и игнорирования встроенных разделителей в файле. Поэтому вместо использования 0: мы можем проанализировать CSV-файл следующим образом.

split:"\"" vs' read0 `$":/tmp/kdb.log"; 
headers:`$split[0];   
tab:flip headers!"JFS*"$flip 1_split;
...