如何在Q中将csv加载到表中?

rma*_*esh 0 database kdb

对Q来说很新,我在按照文档中的示例将数据加载到表中时遇到了一些问题.

我正在运行以下代码:

table1: get `:pathname.csv
Run Code Online (Sandbox Code Playgroud)

虽然它不会抛出错误,但是当我运行以下命令时,没有任何内容出现:

select * from table1
Run Code Online (Sandbox Code Playgroud)

或者在选择特定列时:

select col1 from table1
Run Code Online (Sandbox Code Playgroud)

如果有人能指导我朝着正确的方向前进,那就太棒了!

编辑:这似乎工作并保留我的所有列:

table1: (9#"S";enlist csv) 0: `:data.CSV
Run Code Online (Sandbox Code Playgroud)

Jon*_*ray 6

您将需要使用0: https://code.kx.com/q/ref/filenumbers/#load-csv

具体用法取决于您的csv,因为您需要定义数据类型以将每个列加载为.

作为一个例子,这里我有一个带有long,char和float列的CSV:

(kdb) chronos@localhost ~/Downloads $ more example.csv 
abc,def,ghi
1,a,3.4
2,b,7.5
3,c,88
(kdb) chronos@localhost ~/Downloads $ q
KDB+ 3.6 2018.10.23 Copyright (C) 1993-2018 Kx Systems
l64/ 4()core 3894MB chronos localhost 127.0.0.1 EXPIRE 2019.06.15 jonathon.mcmurray@aquaq.co.uk KOD #5000078

q)("JCF";enlist",")0:`:example.csv
abc def ghi
-----------
1   a   3.4
2   b   7.5
3   c   88 
q)meta ("JCF";enlist",")0:`:example.csv
c  | t f a
---| -----
abc| j    
def| c    
ghi| f    
q)
Run Code Online (Sandbox Code Playgroud)

我使用chars "JCF"分别定义数据类型long,character和float.

enlist使用delimiter(",")来指示CSV的第一行包含列的标题.(否则,可以在您的代码和构建的表中提供这些)

另请注意,在q-sql中,*没有必要像标准SQL那样; 你可以简单select from table1地查询所有列