kdb / q:在分区表中选择使用函数

时间:2015-10-27 13:25:49

标签: kdb

我正试图从多个日期的分区表中获取最大值。在约束到特定日期的日期运行时,查询工作正常。 E.g。

select {max neg x-maxs x} pnl from trades where date=last date

它会在多个日期缩小地图,因此上述查询不再有效。我可以通过添加另一个聚合来使查询在多个日期运行:

select max {max neg x-maxs x} pnl from trades

但它并没有从连续的交易顺序获得最大亏损,而是每日最多的亏损。

我想知道是否有一种方法可以让它与单个选择一起工作,而不会像

那样链接选择
select {max neg x-maxs x} pnl from select pnl from trades

我有一个相当大的查询,在最大亏损只是其中之一的交易中提取了很多不同的指标。使用链式选择意味着我需要将大查询分解为两个查询,map-reduced和non-map-reduced,然后将它们连接起来,这会使查询看起来很难看。

谢谢!

1 个答案:

答案 0 :(得分:0)

选择查询在分区db中的每个日期运行,并将函数应用于每个日期值,最后根据调用聚合它们(用户定义的函数的行为与普通的函数不同)。

所以我认为你不能将它合并到一个查询中。但是有一些方法可以让您的查询更加通用,并且可以针对不同的场景重复使用。

对于前。将您的查询转换为函数形式,并在该查询中使用列名和用户函数的变量。把它放在一个接受列名和用户功能的函数中。现在,您可以使用不同的(列;函数)集来调用此函数。类似的东西:

runF:{[col;usrfunc] funtional_query_uses_col_userfunc }

所有这些都取决于您的使用案例。还要检查内存使用情况,因为您将大量数据存入内存。