KDB 排除具有空值的行

KDB Excluding rows that have nulls

我有一个 table,其中有少量具有空值的单元格(分散在整个数据集中)。有什么简单的方法可以排除所有列中有空值的行吗?

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

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

要么使用简单的列表函数以便于阅读代码 或速度的函数形式。 函数形式会更快,因为它不会扫描所有整列,只扫描那些通过过滤器每个阶段的列。

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

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

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"