在Big Query中,如何有效地仅选择具有非零和非空列的行?

时间:2019-09-06 13:11:37

标签: sql google-cloud-platform google-bigquery

我在Big Query中有一个包含大量列的表。

表中的行很多,某些列值为0 / 0.0,并且为null。

例如

Row A      B    C     D     E   F
1   "abc"  0   null  "xyz"  0   0.0
2   "bcd"  1    5    "wed"  4   65.5

我只需要选择那些具有非零Integer,Float和非NULL值的行。基本上,我只需要上表中的第2行

我知道我可以通过对每个列使用此查询来做到这一点

SELECT * FROM table WHERE (B IS NOT NULL AND B is !=0) AND
.
.
.

但是我有很多列,并且很难为每个列编写这样的查询。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

以下BigQuery标准SQL示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT "abc" a, 0 b, NULL c, "xyz" d, 0 e, 0.0 f UNION ALL
  SELECT "bcd", 1, 5, "wed", 4, 65.5 
)
SELECT *
FROM `project.dataset.table` t
WHERE NOT REGEXP_CONTAINS(TO_JSON_STRING(t), r':0[,}]|null[,}]')  

有输出

Row a   b   c   d   e   f    
1   bcd 1   5   wed 4   65.5