如何参数化 KDB 中的列列表?
How do I parameterise the column list in KDB?
我有一些重复的查询:
select lR, e10, e25, vr from z
有没有办法让我做类似的事情:
features: `lR`e10`e25`vr
select features from z
您可以像这样使用#:
`lR`e10`e25`vr#z
注意:此处的左侧参数必须是一个列表,因此 select 单个列使用以下内容:
enlist[`vr]#z
示例:
q)t:([]a:`a`b`c;b:til 3;c:0b);
q)`a`b#t
a b
---
a 0
b 1
c 2
另一种方法是使用函数形式(您可以使用 parse
构建):
q)0N!parse"select lR, e10, e25, vr from z";
(?;`z;();0b;`lR`e10`e25`vr!`lR`e10`e25`vr)
q)features:`lR`e10`e25`vr
q)?[z;();0b;features!features]
如果为此使用 #
,请注意它会在键控 table 上失败。
修改它以在任何 table 上工作的一种可能方法是:
f:{[t;c] if[not .Q.qt[t]; '"Input is not a table"]; c,:(); $[99h = type[t];c#/:t;c#t]}
因此请确保您的 table 实际上是一个 table,确保列是一个列表,然后执行所需的 #
操作。
q)t
a| b c d
-| ------
a| 4 7 10
b| 5 8 11
c| 6 9 12
q)f[t;`b]
a| b
-| -
a| 4
b| 5
c| 6
q)f[0!t;`b]
b
-
4
5
6
q)f[flip 0!t;`b]
'Input is not a table
[0] f[flip 0!t;`b]
^
我有一些重复的查询:
select lR, e10, e25, vr from z
有没有办法让我做类似的事情:
features: `lR`e10`e25`vr
select features from z
您可以像这样使用#:
`lR`e10`e25`vr#z
注意:此处的左侧参数必须是一个列表,因此 select 单个列使用以下内容:
enlist[`vr]#z
示例:
q)t:([]a:`a`b`c;b:til 3;c:0b);
q)`a`b#t
a b
---
a 0
b 1
c 2
另一种方法是使用函数形式(您可以使用 parse
构建):
q)0N!parse"select lR, e10, e25, vr from z";
(?;`z;();0b;`lR`e10`e25`vr!`lR`e10`e25`vr)
q)features:`lR`e10`e25`vr
q)?[z;();0b;features!features]
如果为此使用 #
,请注意它会在键控 table 上失败。
修改它以在任何 table 上工作的一种可能方法是:
f:{[t;c] if[not .Q.qt[t]; '"Input is not a table"]; c,:(); $[99h = type[t];c#/:t;c#t]}
因此请确保您的 table 实际上是一个 table,确保列是一个列表,然后执行所需的 #
操作。
q)t
a| b c d
-| ------
a| 4 7 10
b| 5 8 11
c| 6 9 12
q)f[t;`b]
a| b
-| -
a| 4
b| 5
c| 6
q)f[0!t;`b]
b
-
4
5
6
q)f[flip 0!t;`b]
'Input is not a table
[0] f[flip 0!t;`b]
^