kdb + / q:防止初始化表返回逗号

时间:2015-01-23 18:04:16

标签: kdb

考虑以下示例:

test:([] name:`symbol$(); secondColumn:`int$());
insert[`test;(`John;1)];
myvar:exec name from test;

现在myvar现在是:

q)myvar
,`John

所以要选择实际结果,我必须这样做:

q)myvar[0]
`John

我理解这是因为初始化,所以有没有办法让myvar立即包含实际值?

2 个答案:

答案 0 :(得分:2)

使用[0]first的数组访问是正确的方法,如果你想要一个" atomic"变量

myvar:first exec name from test;

答案 1 :(得分:1)

可以通过多种方式创建KDB中包含单个元素的列表(这是您在myvar中获得的内容)

q)enlist `John
,`John
q)(),`John
,`John

KDB表基本上是列表字典的flip

`name`secondColumn!(`John`James;1 2)  /Dictionary of lists
name        | John James
secondColumn| 1    2

q)test2:flip `name`secondColumn!(`John`James;1 2)
name  secondColumn
------------------
John  1
James 2

以下两个命令都会获得相同的结果:

q)exec name from test2
q)test2[`name]
`John`James

当您使用test命令选择exec列时,它会返回列表中的所有元素(包含一个元素的列表)

除了在接受的答案中解释的方式之外,还有更多的方法(稍微不同),你可以从表中返回第一个元素。

q)exec name[0] from test
q)test[`name][0]
q)exec first name from test