【发布时间】:2020-05-23 18:45:14
【问题描述】:
我正在尝试通过附加消息将消息从 tp 日志直接重播到磁盘上的分区表,因为与 tplog 大小相比,我没有太多主内存。
TpLog 如下:
q)9 2 sublist get `:/Users/uts/Desktop/repos/ktick/tick/sym2020.05.23
`upd `trade (,0D22:38:00.083960000;,`MSFT.O;,45.15104;,710)
`upd `quote (,0D22:38:01.082882000;,`VOD.L;,341.2765;,341.3056;,732;,481)
我正在使用下面的 'upsert' 方法将这些 tplog 消息附加到分区表,但它失败并在 upsert 上出现类型错误:
quote:([]time:`timespan$();sym:`symbol$();bid:`float$();ask:`float$();bsize:`int$();asize:`int$());
trade:([]time:`timespan$();sym:`symbol$();price:`float$();size:`int$());
`:/Users/uts/db/2020.05.23/quote/ set .Q.en[`:/Users/uts/db;]quote;
`:/Users/uts/db/2020.05.23/trade/ set .Q.en[`:/Users/uts/db;]trade;
upd:{[t;d]
if[`trade~t;[show raze d;`:/Users/uts/db/2020.05.23/trade/ upsert .Q.en[`:/Users/uts/db;]enlist (cols trade)!raze d]];
};
-11!`:/Users/uts/Desktop/repos/ktick/tick/sym2020.05.23
错误:
'type
[1] upd:{[t;d]
if[`trade~t;[show raze d;`:/Users/utsav/db/2020.05.23/trade/ upsert .Q.en[`:/Users/utsav/db;]enlist (cols trade)!raze d]];
^
}
但如果我尝试手动将消息附加到分区表,它工作正常:
`:/Users/uts/db/2020.05.23/trade/ upsert .Q.en[`:/Users/uts/db;]enlist (cols trade)!raze (enlist 0D22:39:00.083960000;enlist `MSFT.O;enlist 45.15104; enlist 710)
不确定为什么 'upsert' 在 upd 函数中不能与 -11! 一起工作。
如果有更好的方法(很可能必须有)在不使用太多主内存的情况下将 tplogs 直接重播到磁盘,请分享(详细信息/链接)。
【问题讨论】:
标签: kdb