(kdb + / Q语言)从CSV导入Parser(已编辑)创建单独的表文件

时间:2013-06-18 17:45:11

标签: database parsing import kdb q-lang

我有一个包含一些数据的(大)CSV文件。我有code.kx.com使用.Q.fsn

的导入程序
colnames:`Symbol`Date`Time`Sequence`Exchange`Type`Level`Condition`Price`Size`BuyerID`SellerID
.Q.fsn[{`:newCreatedFile upsert flip colnames!("SDTISSISFISS";",") 0:x};`:C:/myDir/data.csv 5000000]

此代码使用来自newCreatedFile的数据创建一个名为data.csv的文件,假定一个大数据文件,以5000000字节的块处理数据。

问题:

我想从这些数据创建2个独立的文件,让我们说区别的基础是“条件”列中的值。对于每一行,如果Condition列中的值是x,y或z放在文件A.csv中,否则为B.csv。

这是if语句的伪代码:

$[Condition in `x`y`z; Afunction ; Bfunction]
Afunction:{`:newA upsert flip ...};
Bfunction:{`:newB upsert flip ...};

我如何设置if语句?我目前有:

$[datatable.Condition = `SomeCondition; fileA;fileB]

但是我遇到了类型错误。如何匹配某列的每个值?

是否应在导入原始数据文件时或在将数据文件创建到kdb的表格后进行检查?

1 个答案:

答案 0 :(得分:0)

当您检查条件时,您还没有在示例中解析该列,这需要先完成。您可以使用以下内容:

foo:{t:flip colnames!("SDTISSISFISS";",") 0:x;
     `:newA upsert select from t where Condition = `SomeCondition;
     `:newB upsert select from t where not Condition = `SomeCondition}

.Q.fsn[foo;`:C:/myDir/data.csv;5000000]