KDB / Q:无法创建在KDB表中存储列表的列

阿克瑟·达米尔(Akshay Damle)

我是KDB和Q的新手。

我在Q For Mortals中阅读了以下内容,并推断出KDB支持复合列。

在嵌套列中,所有项目都是相同类型的简单列表的情况在kdb +中特别处理。我们称其为复合列。不需要所有简单列表都具有相同的长度。

我知道可以在表中创建一个新列,如下所示: tablename: update newcol:value from tablename

当我将值设置为另一列或使用其他列或常量值进行某些计算时,它可以正常工作,并在表中使用适当设置的值创建新列。但是,当我尝试将值设置为列表时,它不起作用:tablename: update newcol: (1 2) from tablename给出“长度”错误。

我浏览了Q For Mortals中的文档,但无法弄清楚如何创建这样的复合列。请帮助我创建一个存储列表的列。谢谢!

克里利

没有看到示例,这很可能是因为q试图将其用作与表长度不1 2一样的值newcol要强制列表本身作为表中的每个条目,您需要有适当数量的值。您可以使用虚拟列i实现此目的enlist

q)tab:([]time:5#.z.d;col1:1 2 3 4 5)
q)tab
time       col1
---------------
2020.07.17 1
2020.07.17 2
2020.07.17 3
2020.07.17 4
2020.07.17 5
q)update col2:1 2 from tab
'length
q)show tab:update col2:count[i]#enlist 1 2 from tab
time       col1 col2
--------------------
2020.07.17 1    1 2
2020.07.17 2    1 2
2020.07.17 3    1 2
2020.07.17 4    1 2
2020.07.17 5    1 2
q)meta tab
c   | t f a
----| -----
time| d
col1| j
col2| J

该表的元数据包含col2的大写字母J,指示每个条目都是多头列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章