读取 q kdb 中的 csv 文件,无需手动指定列类型

Uts*_*Uts 1 kdb

kdb 有什么方法可以读取 csv 文件,就像 pandas 中的 read_csv() 函数一样简单。

我通常使用类似下面的代码来读取 kdb 中的 csv

("I*FS";enlist ",")0:`:a.csv / where a.csv is a csv file with Integer, String, Float and Symbol columns
Run Code Online (Sandbox Code Playgroud)

很多时候在实际情况下,我们要读取的csv文件有超过100列,那么很难提供列类型来运行。
kdb 有没有办法读取 csv,其中 kdb 可以自行理解列的类型?就像是

("*";enlist ",")0:`:a.csv / this fails
Run Code Online (Sandbox Code Playgroud)

ter*_*nch 5

Simon Garland 多年前写过一个“csv 猜测”脚本:https ://github.com/simongarland/csvguess

它可能仍然相关。我相信一些 IDE(例如 qStudio 和 Kx 的分析师(?))也内置了此功能。

或者,您可以读取 csv 的第一行来获取列数(例如n),然后n#"*"将整个 csv 作为字符串列读取:

q)(count["," vs first system"head -1 a.csv"]#"*";enlist ",")0:`:a.csv
col1 col2 col3
----------------------
,"a" ,"1" "2019-01-01"
,"b" ,"2" "2019-01-01"
,"c" ,"3" "2019-01-01"
Run Code Online (Sandbox Code Playgroud)

  • Windows 没有 head 命令,因此以下是读取列名称的纯 q 解决方案,可以调整它以读取前 n 列 ```(enlist "c";enlist 1) 1: r直到 -1 + 第一个位置 "\n"=r:read1(`:parameters.csv;0;100000000)``` (4认同)