【问题标题】:How to only SELECT rows with non-zero and non-null columns efficiently in Big Query?如何在 Big Query 中有效地仅选择具有非零和非空列的行?
【发布时间】:2019-09-06 21:33:09
【问题描述】:

我在 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

我只需要选择那些具有非零整数、浮点数和非空值的行。基本上,我只需要上表中的第 2 行

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

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

但是我有很多列,为每一列编写这样的查询会很困难。有没有更好的方法来处理这个问题?

【问题讨论】:

  • 并非如此。扩展的where 子句可能是实现此逻辑的最简单方法。
  • 您是否考虑过向您的 TABLE 添加一个 PERSISTED COMPUTED COLUMN,您可以将其命名为 IsAllZerosOrNull 并在您的 WHERE 条件下使用此列(WHERE IsAllZerosOrNull = 0)。您还可以将此列放在索引中以获得更快的结果

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


【解决方案1】:

以下 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    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多