【问题标题】:kdb/q: use function in a select from partitioned tablekdb/q:在从分区表中选择时使用函数
【发布时间】:2015-10-27 13:25:49
【问题描述】:

我正在尝试从多个日期的分区表中获取最大回撤。当日期限制在特定日期运行时,查询工作正常。例如

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

谢谢!

【问题讨论】:

    标签: kdb


    【解决方案1】:

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

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

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

    runF:{[col;usrfunc] funtional_query_uses_col_userfunc }

    这一切都取决于您的用例。还要检查内存使用情况,因为您会将大量数据放入内存中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多