如何选择/执行包含“。”的列?

时间:2019-02-20 07:21:32

标签: kdb

我有一个表,其中包含带有“。”的列。在其中:

t:([] x:10?`a`b`c; y.z:10?100.0)

似乎不起作用:

select/exec y.z from t

还使用功能性exec尝试了这些:

?[`t; (); (); `y.z"]
?[`t; (); (); `$ parse "y.z"]

但这也不起作用。这种表示法有效:

`y.z xasc t

是否可以在y.z列上运行exec?同样是这样,在这里我可以重命名列:

select yz:y.z from t

2 个答案:

答案 0 :(得分:4)

重命名问题列的一种方法是使用x xcol y。这将x作为新列名的符号列表以及表y作为列表。可以这样使用:

q)exec yz from `x`yz xcol t
39.27524 51.70911 51.59796 40.66642 17.80839 30.177..

尝试从列x.y中进行选择的问题是q会将.解释为index/apply形式。

编辑:

这里有一个方便的.Q可以使用! .Q.id x是一个方便的功能,可以“清除”符号。 x可以是一个表(或符号),可以快速重命名任何“坏”列。基本上,我们所做的一切都在做:

q).Q.id t
x yz
----------
a 39.27524
b 51.70911
c 51.59796
c 40.66642
b 17.80839

答案 1 :(得分:1)

在列名中加点不是一个好习惯,更好的解决方案是使用其他答案中建议的方法来修复列名。

但是,如果要获取此类列,则可以使用以下解决方案。

选择等效项->首先从表中选择列,然后使用xcol重命名。

q) t:([]x:`a`b`c; y.z:1 2 3)
q) `yz xcol enlist[`y.z]#t
yz
--
1
2
3

等效于执行->使用索引:

q) t[`y.z]
1 2 3