如何在kdb中创建光标?

如何在kdb中创建光标?,kdb,Kdb,我希望迭代时间序列、分区kdb数据库中的所有行,并在每个步骤执行一些计算。在SQL中,这可以通过游标来完成。kdb中有类似的东西吗 一些背景:数据库由数百万条时间序列记录组成,我需要在遍历行时维护许多对象的状态。在每个步骤中,我都需要运行一些“如果”语句。我想将我的计算集成到一个查询中,但由于我必须执行的测试数量,我认为游标或类似行回调的东西更合适。在“重放”数据库时运行自定义代码的最有效解决方案是什么?q中的表的行为与字典列表非常相似。因此,如果t是一个表,t[0]将是一个字典,将列名映射到第

我希望迭代时间序列、分区kdb数据库中的所有行,并在每个步骤执行一些计算。在SQL中,这可以通过游标来完成。kdb中有类似的东西吗


一些背景:数据库由数百万条时间序列记录组成,我需要在遍历行时维护许多对象的状态。在每个步骤中,我都需要运行一些“如果”语句。我想将我的计算集成到一个查询中,但由于我必须执行的测试数量,我认为游标或类似行回调的东西更合适。在“重放”数据库时运行自定义代码的最有效解决方案是什么?

q中的表的行为与字典列表非常相似。因此,如果t是一个表,t[0]将是一个字典,将列名映射到第一行值,t[1]将是第二行,依此类推。所以实际上你的光标只是一个索引,而光标的前进就是索引的递增

q)t:([]c1:1 2 3;c2:`a`b`c);
q)show t[0];
c1| 1
c2| `a
q)show t[1];
c1| 2
c2| `b
另一方面,可能对列表元素应用操作的更惯用方法是使用每个运算符:

q)f:{show x};
q)f each t;
c1| 1
c2| `a
c1| 2
c2| `b
c1| 3
c2| `c

对于分区表,我必须在索引之前创建一个处理程序:
t:select from myPartTable,其中data=2013.05.23
。我相信在分配
t
时,数据不会加载到内存中,只有在通过索引访问时,对吗?是的。如果要将数据加载到内存中,请添加另一个where子句
i>-1
。从-处的文档中,一个八字表沿其列垂直拆分,然后映射到内存中。当对映射表执行查询时,列数据将根据需要加载,并由O/S缓存。