1

我有一个包含一些数据的(大)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

4

1 回答 1

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]
于 2013-06-18T18:43:35.623 回答