KDB排除具有空值的行

时间:2015-03-04 21:29:02

标签: null kdb

我有一个表,其中有一些具有空值的单元格(散布在数据集中)。是否有任何简单的方法可以排除任何列中具有null的所有行?

我只是想避免这种情况......

select from T where not null col1, not null col2, not null col3, etc... 

2 个答案:

答案 0 :(得分:5)

使用简单的列表函数来轻松读取代码 或速度的功能形式。 函数形式会更快,因为它不会扫描通过过滤器每个阶段的所有列。

q)t:flip `a`b`c`d`e!flip {5?(x;0N)} each til 10
q)t
a b c d e
---------
0       0
  1   1
  2 2 2
3 3   3 3
4 4 4 4 4
      5 5
        6
7 7
  8     8
9 9   9 9

// simple way
q)where all each not null t
,4
q)t where all each not null t
a b c d e
---------
4 4 4 4 4

// faster
q)?[t;{(not;(null;x))} each cols t; 0b; ()]
a b c d e
---------
4 4 4 4 4

答案 1 :(得分:2)

添加到Ryan的答案.....如果你的表有字符串(嵌套)列,那么你需要稍微修改一下函数形式:

q)tab:([] col1:`a`b`c`d;col2:1 0N 3 0N;col3:"v vv";col4:0n 1.0 2.0 3.0;col5:("";"";"rf";"er"))

q)tab
col1 col2 col3 col4 col5
------------------------
a    1    v         ""
b              1    ""
c    3    v    2    "rf"
d         v    3    "er"

然后使用零计数作为空字符串的指示符:

q)?[`tab;not,'enlist each @[(null;0=count');"C"=exec t from meta tab],'cols tab;0b;()]
col1 col2 col3 col4 col5
------------------------
c    3    v    2    "rf"