将CSV文件数据加载到表中

时间:2018-06-29 03:09:57

标签: database csv kdb

创建的表如下:

source:([id:`symbol$()] ric:();source:();Date:`datetime$())
property:([id:`symbol$()] Value:())

然后我有两个.csv文件,其中包含两个表数据。

property.csv显示如下:

id,Value
TEST1,1
TEST2,2

source.csv显示如下:

id,ric,source,Date
1,TRST,QO,2017-07-07 11:42:30.603
2,TRST2,QOT,2018-07-07 11:42:30.603

现在,如何一次将csv文件数据加载到每个表中

2 个答案:

答案 0 :(得分:4)

您可以使用0:加载定界记录。 https://code.kx.com/wiki/Reference/ZeroColon

该函数最简单的形式是(types; delimiter) 0: filehandle

类型应以大写字母表示,每列一个,或忽略列的空格。例如,对于source.csv使用“ SJ”将意味着我想在id列中将其读取为符号,并将value列中的读取为长整数。

定界符指定如何分隔各列,在这种情况下为逗号分隔值(CSV)。您可以将定界符作为字符串","传入,它将把每一行都视为数据的一部分,并返回列的嵌套列表,您可以将其插入具有匹配模式的表中,也可以附加在标题和手动翻转字典,然后翻转以得到像这样的表:flip `id`value!("IS";",") 0: `:test.txt

如果将列标题作为csv中的第一行,则可以传递一个登记的分隔符enlist ",",然后使用列标题并在kdb中返回一个表作为标题,然后可以重命名如果您认为合适的话。

由于您要读取的文件的列类型不同,因此您可以创建一个函数来读取示例

{x insert (y;enlist ",") 0:z}'[(`source;`property);("SSSP";"SJ");(`:source.csv;`:property.csv)]

这将允许您指定应创建的表的名称,文件的列类型和文件句柄。

我建议使用时间戳记,而不是(折旧的)日期时间,因为它存储为long而不是float,所以比较不会有问题。

答案 1 :(得分:1)

您可以使用$user = DB::selectOne('select roc_no,pic_email from vendors where id = :id', ['id' => $id]); OR $user = DB::table('vendors')->where('id',$id)->select('roc_no','pic_email')->first(); // $user->pic_email; email // $user->roc_no; ROC NO 列出目录的内容;

key

最后,加载files: key `:.; /get the contents of the dir files:files where files like "*.csv"; /filter the csv files m:`property.csv`source.csv!("SJ";"JSSZ"); /create the mappings for each csv file {[f] .[first ` vs f;();:; (m@f;enlist csv) 0: hsym f]}each files each文件;请注意,这里的目录是'pwd',在使用csv

之前,您可能需要将目录路径添加到每个文件中