在KDB中添加2个词典时出现类型错误

时间:2018-03-25 09:31:36

标签: kdb

我可以添加第二个词典(s i)并将其分配给(d t)

的词典
d1:`d`t!(.z.d ;.z.t)
d1,:`s`i!`VOD`L
d1

然而反过来不起作用,我得到类型错误:

d2:`s`i!`VOD`L
d2,:`d`t!(.z.d ;.z.t)
d2

2 个答案:

答案 0 :(得分:3)

当字典d2创建了符号所有值时。当您尝试使用带有非符号类型的d2,:更新此项时,会导致kdb因类型不匹配而引发错误。防止这种情况的一种方法是在字典中添加一个空键,以确保您可以为您的值添加混合类型:

q)d2:enlist[`]!enlist(::)    / add null key
q)d2,:`s`i!`VOD`L
q)d2
 | ::
s| `VOD
i| `L
q)d2,:`d`t!(.z.d ;.z.t)
q)d2
 | ::
s| `VOD
i| `L
d| 2018.03.25
t| 09:42:52.754

如果您调查名称空间,例如.q或创建自己的名称空间,您将看到存在空键,确保名称空间可以包含混合类型。

答案 1 :(得分:1)

在第一种情况下,(d t)正在制作异类词典:

q)d1:`d`t!(.z.d ;.z.t)
q)type value d1
0h

现在,如果您添加并指定任何同类或异类字典,它将起作用。

而在另一种情况下,创建的第一个字典是同质的,当你添加&时,它会抛出错误。分配一个异质词典(或其他类型的同类词典)

q)d2:`s`i!`VOD`L
q)type value d2
11h
q)type value `d`t!(.z.d ;.z.t)

要解决此问题,您应该只添加字典然后分配它。

q)d2:`s`i!`VOD`L
q)d2:d2, `d`t!(.z.d ;.z.t)
q)d2
s| `VOD
i| `L
d| 2018.03.25
t| 09:59:17.109