提问人:foam78 提问时间:3/26/2022 更新时间:3/29/2022 访问量:519
有效删除包含 null 值的行
Remove rows containing null values efficiently
问:
对于包含多行的表,删除包含任何 null 值的行的最有效方法是什么?
此外,为什么我会收到错误
ERROR: 'time (attempt to use variable time without defining/assigning first
尽管在使用功能选择时我没有将其命名为“时间”
?[t;{(not;(null;x))} each cols t; 0b; ()]
在此 S/Oanswer 中给出?
答:
2赞
SJT
3/28/2022
#1
您的表是在内存中还是在磁盘上展开?
如果您的表在内存中,那么简单表单也可能是最快的。
show t:flip`a`b`c`d`e!(1+til 100)*/:100 cut 500?(1 0N)where 19 1
a b c d e
--------------
1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
9 9 9 9 9
10 10 10 10 10
11 11 11 11 11
12 12 12 12 12
13 13 13 13
14 14 14 14 14
15 15 15 15 15
16 16 16 16
17 17 17 17
18 18 18 18 18
..
q)\ts:1000 ?[t;{(not;(null;x))}each cols t;0b;()]
5 7552
q)\ts:1000 t where not any null flip t
2 6768
如果桌子在磁盘上张开,游戏就会改变。在展开表中,每一列都存储为一个文件。Select 运算符的第二个参数是约束列表;每一个都是一个解析树。而上面测试的每个单元格,Select 依次应用约束:只有通过上一个约束的行才会测试下一个约束。如果没有行满足第一个约束,则可能根本不需要读取后续列文件。null flip t
t
由此遵循的规则是:按限制性的降序列出约束 - 如果 null 在某些列中更常见,请先测试它们。
关于内存中测试,请注意,它可能比 快很多,具体取决于 null 是否常见。not any
all not
q)q:null flip t
q)\ts:10000 all not q
9 1168
q)\ts:10000 not any q
6 656
评论
t
(type t;meta t)
type t
退货和退货98h
meta t
d,p,s,f,j,b