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

Count all tables in one instance in kdb

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

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

但是我遇到了类型错误

这是一种方法

count each `. tables[]

我正在使用 3.6 2018.05.17,你的表达对我有用。然后我将 select 更改为 exec 到 return 只是一个计数列表。

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

您 运行 的每个 select 查询都是 returning 一个 table 的形式:

x
-
3

最好使用 exec 而不是 select 来简单地 return 计数值,例如:

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

您当前的方法将尝试 return table 的列表:例如:

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

但是,类型错误让我认为您的 tables 可能存在问题,因为这对于内存中的 tables 应该不会出错。

您的语句在第一行末尾不包含尾随分号 ;,这将导致 IDE 中出现错误,例如 qpad(假设您是 运行照写的那样)。

如果不是 运行来自 IDE 我会检查我的 hdb 是否有任何可能丢失的数据和 运行 一些健全性检查(即我可以 select 从每个在我的 table 中,类型是否跨分区匹配,我是一个虚拟列,表示行数,因此其他列中不符合类型的问题可能不是原因,但调查可能会得出正确的答案)

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

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

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

这里我select对每个table进行计数,还要加上table的名称,将每个结果翻转到一个字典中,从而得到一个字典列表符合类型和键名,实际上是 table,因此是我的结果。通过这种方式,您可以很好地跟踪您实际计算的内容。

下面的代码帮助我们获取每个 table 的计数以及 tablename.

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

只获取计数而不是table名称。

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