计算kdb中一个实例中的所有表

时间:2018-10-23 20:01:48

标签: kdb

我想计算同一实例中的所有表。 我已经有一段时间没有使用过kdb了,但我忘记了如何进行这项工作。 这就是我得到的:

tablelist:tables[]
{select count i from x} each tablelist

但是我遇到类型错误

5 个答案:

答案 0 :(得分:3)

您的语句在第一行的末尾不包含结尾的半冒号;,这会在诸如qpad之类的IDE中导致错误(假设您按编写的方式运行它)。

如果不是从IDE运行,我将检查我的hdb是否有任何可能的丢失数据并运行一些完整性检查(即,我可以正常地从每个表中进行选择,类型是否跨分区匹配,我是一个代表行数的虚拟列)因此您其他栏中的不符合类型的问题可能不是原因,但调查可能会得出正确的答案)

一种实现您正在尝试的方法是(使用虚拟数据):

q){flip select counts:count i,tab:1#x from x}each tablelist:tables[]

 counts tab
 -------------
 5469   depth
 3150   quotes
 3005   trades

在这里,我为每个表选择计数,还要添加表的名称,将每个结果翻转到字典中,这将得到一列符合类型和键名的字典,实际上是一个表,因此我的结果。这样,您就可以很好地跟踪实际计数的内容。

答案 1 :(得分:2)

您运行的每个选择查询都将以以下形式返回表:

x
-
3

最好使用exec而不是选择只返回计数值的选择,例如:

q){exec count i from x} each tables[]
3 2

您当前的方法将尝试返回表列表:例如:

q){select count i from x} each tables[]
+(,`x)!,,3
+(,`x)!,,2

但是,类型错误使我认为您的表可能存在问题,因为内存表应该不会出错。

答案 2 :(得分:1)

这是一种方式

count each `. tables[]

答案 3 :(得分:1)

我正在使用3.6 2018.05.17,您的表情对我有用。然后,我将select更改为exec以仅返回计数列表。

q){从x的exec count i个}每个表[]

答案 4 :(得分:0)

下面的代码有助于我们获取每个表的计数以及表名。

q)flip (`table;`msgcount)! flip {x, count value x}@'tables[]

仅获取计数而不获取表名。

q){count value x}@'tables[]