【问题标题】:BigQuery COUNT column per ARRAY element每个 ARRAY 元素的 BigQuery COUNT 列
【发布时间】:2021-10-19 18:06:32
【问题描述】:

我有一个具有以下架构的表

id: STRING, NULLABLE
values: STRING, REPEATED

Row sample
----------------------------
| id    | values           |
----------------------------
| 123abc| [val1,val2,val3] |
----------------------------

我想计算每个值的 id 数。

Output sample
----------------------------
| value    | id_count      |
----------------------------
| val1     | 1             |
----------------------------
| val2     | 1             |
----------------------------
| val3     | 1             |
----------------------------

我创建了以下查询,它工作正常,但我正在寻找更好的方法

SELECT value, COUNT(id) AS id_count
FROM(
    SELECT id, value
    FROM `myproject.mytable`, UNNEST(values) AS value
)
GROUP BY value

我正在尝试减少工作人员之间混洗的数据量,因此我正在寻找一种方法来绕过 UNNEST 功能。

【问题讨论】:

  • 您提出的查询 - 无法正常工作!它根本无法工作!同时,在这种情况下使用unnest 是可行的方法 - 是什么让你觉得它对你来说不够好?
  • 好吧,我担心此查询或类似查询在应用于大型表 (20+ TB) 时的性能。
  • 那么请看下面的答案!
  • 您的答案在所有方面都与我的一样,我正在寻求改进。还是谢谢
  • 哦,当然。这与我在 cmets 上面已经提到的性能无关 - unnest 是正确且唯一的方法 - 我的答案更多的是关于如何更好地编写查询以使其更具可读性和可管理性:o)

标签: google-bigquery query-optimization


【解决方案1】:

考虑下面

select value, count(distinct id) id_count
from `myproject.mytable`, unnest(values) AS value
group by value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多