有效地删除包含空值的行
Remove rows containing null values efficiently
对于包含许多行的 table,删除包含任何空值的行的最有效方法是什么?
另外,为什么会报错
ERROR: 'time (attempt to use variable time without defining/assigning first
尽管我在使用函数 select
时没有任何名称为“时间”
?[t;{(not;(null;x))} each cols t; 0b; ()]
在?
中给出
你的table是在内存中还是展开在磁盘上?
如果您的table在内存中,那么简单的表格也可能是最快的。
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
如果 table 在磁盘上展开,游戏就会改变。在展开的 table 中,每一列都存储为一个文件。 Select 运算符的第二个参数是约束列表;每一个解析树。而上面的 null flip t
测试了 t
的每个单元格,Select 应用的是约束 连续 :只有已经通过先前约束的行才会被测试下一个。如果没有行满足第一个 constraint/s 后续列文件可能根本不需要读取。
遵循以下规则:按限制性的降序列出您的约束 - 如果空值在某些列中更常见,请先测试它们。
关于 in-memory 测试,请注意 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
对于包含许多行的 table,删除包含任何空值的行的最有效方法是什么?
另外,为什么会报错
ERROR: 'time (attempt to use variable time without defining/assigning first
尽管我在使用函数 select
时没有任何名称为“时间”?[t;{(not;(null;x))} each cols t; 0b; ()]
在
你的table是在内存中还是展开在磁盘上?
如果您的table在内存中,那么简单的表格也可能是最快的。
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
如果 table 在磁盘上展开,游戏就会改变。在展开的 table 中,每一列都存储为一个文件。 Select 运算符的第二个参数是约束列表;每一个解析树。而上面的 null flip t
测试了 t
的每个单元格,Select 应用的是约束 连续 :只有已经通过先前约束的行才会被测试下一个。如果没有行满足第一个 constraint/s 后续列文件可能根本不需要读取。
遵循以下规则:按限制性的降序列出您的约束 - 如果空值在某些列中更常见,请先测试它们。
关于 in-memory 测试,请注意 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