Kdb 从具有限制表达式的表中进行选择,但不执行-失败

Kdb 从具有限制表达式的表中进行选择,但不执行-失败,kdb,k,Kdb,K,对于带有自定义字段c的表t,我可以使用带限制表达式的select,但简单select失败: 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]

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

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
              ^
是虫子,还是我遗漏了什么

Upd:


为什么
从t中选择[2]c[`n]在这里起作用?

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

您需要索引到每个元素中,而不是尝试索引列

q)select c[;`n] from t
x
-
1
0
在此上下文之外的确认词典列表相当于一个表,因此您可以像以前一样进行索引

q)c:(r1;r2)
q)type c
98h
q)c[`n]
10b
我想说的是,复杂列在内存中的表示方式使得这不可能。我怀疑任何创建元素子集副本的修改都将允许列索引,因为副本将格式化为表

这里的一个例子是序列化和反序列化列(不建议这样做)。在
选择[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

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

您需要索引到每个元素中,而不是尝试索引列

q)select c[;`n] from t
x
-
1
0
在此上下文之外的确认词典列表相当于一个表,因此您可以像以前一样进行索引

q)c:(r1;r2)
q)type c
98h
q)c[`n]
10b
我想说的是,复杂列在内存中的表示方式使得这不可能。我怀疑任何创建元素子集副本的修改都将允许列索引,因为副本将格式化为表

这里的一个例子是序列化和反序列化列(不建议这样做)。在
选择[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

谢谢你,马克!但是限制性表达对选择上下文的影响如此巨大吗?谢谢马克!但是,限制表达式对选择上下文的影响是否如此巨大?