【问题标题】:Enums for tables表的枚举
【发布时间】:2021-01-08 21:19:14
【问题描述】:

我在https://code.kx.com/q/ref/enumerate/ 上没有找到关于enum 在表域上 的信息。但是那里存在一些有趣的东西:https://code.kx.com/q/kb/linking-columns。我尝试了这些示例,发现 enum 结构在某些情况下的行为类似于 normal 枚举,但在其他情况下表现出奇怪的行为。

q)kt:1!t:([]a:`a`b`c;b:10 20 30)
q)tt:([]k:`a`a`a`b;d:11 21 31 41)
q)show et1:`t!t[`a]?tt[`k]
`t!0 0 0 1
q)show et2:`kt$tt[`k]
`kt$`a`a`a`b
q)meta select k,d,et1,et2 from tt
c  | t f  a
---| ------
k  | s     
d  | j     
et1| j t   
et2| s kt  
q)select r1.a, r1.b, r2.a, r2.b from update r1:et1, r2:et2 from tt
a b  a1 b1
----------
a 10 a  10
a 10 a  10
a 10 a  10
b 20 b  20

从这个角度来看,et1et2 都有相似的行为。但如果我们检查其他 enum 属性,我们会发现差异:

q)et2[0]
`kt$`a
q)et2[0]:`a
q)
q)et1[0]
`t!0
q)et1[0]:0 / neither works this
't
  [0]  et1[0]:0
             ^
q)et1[0]:(`a`b!(`a;10)) / nor that
't
  [0]  et1[0]:(`a`b!(`a;10))
             ^

如果我们只为键控表构建枚举,情况似乎会更奇怪:查看具有一个键列和两个键列的表的区别:

q)kkt:2!t:([]a:`a`b`c;b:10 20 30;c:11 22 33)
q)kt:1!0!kkt
q)show ekkt:`kkt$((`a;10);(`b;20);(`b;20))
`kkt!0 1 1
q)show ekt:`kt$(`a`b`b)
`kt$`a`b`b

kkt 的相同硬编码(使用 !)枚举表示法。

所以问题是:它们是什么? - 那些具有熟悉的$ 和硬编码! 表符号的枚举?是否可以为他们应用enum-extend 技术(?)以及如何应用?他们有任何文件吗?

【问题讨论】:

    标签: kdb k


    【解决方案1】:

    您看到的是simple foreign keylinked column 之间的区别。如文档中所述,差异包括:

    • 外键专门用于链接到键控表的键。
    • 如果“未知键”不是键控表中的键之一,则外键不允许链接
    • 链接的列可以链接到任意列(即使一个值没有出现在另一个表中 - 因此它不能保证引用完整性)
    • 链接列通常用于磁盘表
    q)kt:([eid:1001 1002 1003] name:`Dent`Beeblebrox`Prefect; iq:98 42 126)
    q)tdetails2:([] eid:1003 1001 1002 1001 1002 1001 777;sc:126 36 92 39 98 42 7)
    q)update linker:`kt!((0!kt)`eid)?eid from `tdetails2
    `tdetails2
    q)select linker.name from tdetails2
    name
    ----------
    Prefect
    Dent
    Beeblebrox
    Dent
    Beeblebrox
    Dent
    
    

    对于简单的外键,后者是不允许的。

    我也不知道您为什么要修改/编辑枚举的值 - 不要那样做!

    【讨论】:

    • 特里,谢谢! 的不存在密钥的情况。我认为(!?) 组合可以与$ 互换,但速度较慢。现在我发现这是两种截然不同的情况。
    • 我试图修改枚举的值只是为了使用示例 - 我不会在任何地方使用它,我保证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2015-08-08
    • 2010-11-26
    相关资源
    最近更新 更多