我想计算同一实例中的所有表。 我已经有一段时间没有使用过kdb了,但我忘记了如何进行这项工作。 这就是我得到的:
tablelist:tables[]
{select count i from x} each tablelist
但是我遇到类型错误
答案 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[]