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

  • 本文关键字:选择 函数 分区表 kdb kdb
  • 更新时间 :
  • 英文 :


我正试图从多个日期的分区表中获得最大缩编。当在日期限制为特定日期的情况下运行时,查询工作正常。例如

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,然后将它们重新连接起来,这会使查询看起来很难看。

谢谢!

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

所以我不认为您可以将其合并为一个查询。但是,您可以寻找一些方法,使查询在不同的场景中更加通用和可重用。

例如,将查询转换为函数形式,并在查询中使用列名和用户函数的变量。将其放在一个函数中,该函数将接受列名和用户函数。现在,您可以使用不同的(column;function)集来调用此函数。类似于:

runF:{[col;usrfunc] funtional_query_uses_col_userfunc }

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

最新更新