【问题标题】:Select from a table with Limit expression works, without - fails从具有限制表达式的表中选择有效,没有 - 失败
【发布时间】:2021-01-14 19:39:55
【问题描述】:

对于带有自定义字段c 的表t 这是字典,我可以使用带有限制表达式的选择,但简单的选择失败:

q)r1: `n`m`k!111b;
q)r2: `n`m`k!000b;
q)t: ([]a:1 2; b:10 20; c:(r1; r2));
q)t
a b  c
----------------
1 10 `n`m`k!111b
2 20 `n`m`k!000b
q)select[2] c[`n] from t
x
-
1
0
q)select c[`n] from t
'type
  [0]  select c[`n] from t
              ^

这是一个错误,还是我遗漏了什么?

更新:

为什么select [2] c[`n] from t 在这里工作?

【问题讨论】:

    标签: kdb k


    【解决方案1】:

    由于 c 是一个列表,它不支持键索引,这就是它返回类型的原因

    您需要为每个元素编制索引,而不是尝试为列编制索引。

    q)select c[;`n] from t
    x
    -
    1
    0
    

    此上下文之外的确认字典列表相当于一个表,因此您可以像以前一样索引

    q)c:(r1;r2)
    q)type c
    98h
    q)c[`n]
    10b
    

    我想说复杂列在内存中的表示方式使得这不可能。我怀疑任何创建元素子集副本的修改都将允许列索引,因为副本将被格式化为表格。

    这里的一个例子是对列进行序列化和反序列化(建议这样做)。在 select[n] 的情况下,它选择了 2 个元素的子集

    q)type exec c from t
    0h
    q)type exec -9!-8!c from t
    98h
    q)exec (-9!-8!c)[`n] from t
    10b
    

    【讨论】:

    • 谢谢马克!但是限制表达式对选择上下文的影响如此巨大吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多