检查所有表中是否有列,如果有列,则打印表名-kdb
在当前名称空间中,我们有3个表,下面有列检查所有表中是否有列,如果有列,则打印表名-kdb,kdb,Kdb,在当前名称空间中,我们有3个表,下面有列 q)t:([] a:`a`b`c; b:1 2 3); q)s:([] a:`a`b`c; b:1 2 3); q)z:([] z:`a`b`c; b:1 2 3); 现在我们要搜索并打印包含列a的所有表 Expected output: `a`s 我有两个丑陋的解决方案,有些奏效 q){$[`a in cols x;x;]} each tables[]; q){(enlist x) where enlist(`a in cols x)}each t
q)t:([] a:`a`b`c; b:1 2 3);
q)s:([] a:`a`b`c; b:1 2 3);
q)z:([] z:`a`b`c; b:1 2 3);
现在我们要搜索并打印包含列a的所有表
Expected output: `a`s
我有两个丑陋的解决方案,有些奏效
q){$[`a in cols x;x;]} each tables[];
q){(enlist x) where enlist(`a in cols x)}each tables[];
但是要寻找更好的最佳解决方案。最好在中使用带有的副词:
q)tables[] where `a in/: cols each tables[]
`s`t
如果这是您希望参数化并再次使用的类型,则以下投影可能对您有用:
f:{[t;c]c!t@/:where each flip(c,:())in/:cols each t}[tables[]];
此函数产生以下输出
q)f`a
a| s t
q)f`a`b
a| `s`t
b| `s`t`z
因此,它将列名映射到包含该列的表列表。
这种映射通常比使用简单列表更为有利,因为它允许快速、易读的索引
q)coldict:f`a`b
q)coldict[`a]
`s`t