【发布时间】:2020-04-07 15:05:07
【问题描述】:
我在 KDB 中有两个表。
一个是带有日期时间、符号列的时间序列(跨越多个日期,例如可以是 1 毫米行或 2 毫米行)。每个时间点都有相同数量的符号和很少的其他标准列,例如价格。 我们称之为 t1:
`date`datetime`sym`price
另一个表是这样的结构:
`date`sym`factors`weights
其中 factor 是一个列表, weights 是每个 sym 的等长列表。 我们称之为 t2。
我正在对这两个表进行左连接,然后取消组合。 每个符号的因子和权重的长度不相等。
我正在做以下事情:
select sum (weights*price) by date, factors from ungroup t1 lj `date`sym xkey t2
但是,这非常慢,如果 t1 有一百万行或更多行,可能会慢到 5-6 秒。
致电所有 kdb 专家寻求建议!
编辑:
这是一个完整的例子: (对于定义 t1 和 t2 的迂回方式表示歉意)
interval: `long$`time$00:01:00;
hops: til 1+ `int$((`long$(et:`time$17:00)-st:`time$07:00))%interval;
times: st + `long$interval*hops;
dates: .z.D - til .z.D-.z.D-10;
timepoints: ([] date: dates) cross ([] time:times);
syms: ([] sym: 300?`5);
universe: timepoints cross syms;
t1: update datetime: date+time, price:count[universe]?100.0 from universe;
t2: ([] date:dates) cross syms;
/ note here my real life t2, doesn't have a count of 10 weights/factors for each sym, it can vary by sym.
t2: `date`sym xkey update factors: count[t2]#enlist 10?`5, weights: count[t2]#enlist 10?10 from t2;
/ what is slow is the ungroup
select sum weights*price by date, datetime, factors from ungroup t1 lj t2
【问题讨论】:
-
嗨,你能举个例子吗?
-
是的,现在提供一个
标签: performance kdb