如何通过 BigQuery 中 STRUCT 类型的表达式解决分组问题

Posted

技术标签:

【中文标题】如何通过 BigQuery 中 STRUCT 类型的表达式解决分组问题【英文标题】:How to solve group by expressions of type STRUCT in BigQuery 【发布时间】:2021-09-30 14:52:26 【问题描述】:

我有一张如下表:

-------------------------------------------------------------------------------------
|             Name                    |                      Singer          |   ID |
-------------------------------------------------------------------------------------
|   Stay,Love Yourself,Crazy In Love  |  Justin Bieber,Justin Bieber,Beyonce |   1  |
-------------------------------------------------------------------------------------

我尝试将名称列拆分为多行并将其另存为另一个表:

WITH TABLE2 AS (
    SELECT ID, 
           NAME
    FROM TABLE
    UNNEST (SPLIT(NAME)) AS NAME
)

我明白了:

------------------------
|     Name       |  ID |
------------------------
|     Stay       |  1  |
------------------------
| Love Yourself  |  1  |
------------------------
| Crazy In Love  |  1  |
------------------------

我想统计收听每首歌曲的用户数,但它显示“不允许按 STRUCT 类型的表达式分组”。谁能帮帮我?

SELECT t2.Name,
       COUNT(DISTINCT ID) as num_users
FROM TABLE2 t2
GROUP BY t2.Name.

【问题讨论】:

【参考方案1】:

考虑下面

select song, count(distinct id) users
from table, unnest(split(name)) song
group by song

【讨论】:

以上是关于如何通过 BigQuery 中 STRUCT 类型的表达式解决分组问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BigQuery Struct Schema 字符串转换为 Javascript 对象?

如何在 BigQuery 中将结构插入(或修改)到 ARRAY<STRUCT<STRING, STRUCT>>?

在 Bigquery 中,如何使用标准 Sql 过滤 Struct 数组以匹配 Struct 中的多个字段?

BigQuery:在标准 SQL 中使用重复/数组 STRUCT 字段加入?

来自 ARRAY<STRUCT<STRING, STRING>> 的 BigQuery 未嵌套内部字符串列

如何在BigQuery中使用offset和ordinal从包含不同数据类型的数组中选择一个元素?