在 q 中创建一个展开的 table

Create a splayed table in q

我有一个 table trades 我想在我创建的目录 splay 中展开。

根据我的研究,正确的语法是:

`:splay/ set trades

我已经试过了,但是我得到一个错误 'type

我已经通过以下方式成功节省了一套公寓 table:

`:splay/flattrades set trades

这在官方文档站点上有记录:https://code.kx.com/q/kb/splayed-tables/

问题可能是您没有使用 .Q.en 枚举符号列。

如果您在枚举之后仍然遇到错误,则可能是由于您的列中的数据类型不一致(例如,混合了 long 和 int 的列)。您可以使用以下内容进行检查:

distinct type''[trades]

假设您的交易 table 是内存中的 table。以上应该 return 每列只有一种唯一的数据类型。

Terry 很可能是正确的,类型错误是由于试图张开 table 而没有确保首先枚举符号。如果出于某种原因你想绕过这个(我不建议这样做),你可以使用类似下面的内容单独编写列。

再说一次,这是不可取的。但这是了解如何在 kdb+

中写入磁盘的一个很好的练习
forceSplay:{[dir;tab] 
    {[d;t;c]@[d;c;:;t[c]]}[dir;0!tab;] each cols tab;
    @[dir;`.d;:;cols 0!tab]
 }

我在这里使用 @set 函数(表示为 :)应用于目录。第一步是单独编写 table 的每一列,接下来是编写 .d 列列表文件。