我有一个包含一些数据的(大)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
的表格后进行检查?
答案 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]