Google BigQuery SQL:使用数组?
Posted
技术标签:
【中文标题】Google BigQuery SQL:使用数组?【英文标题】:Google BigQuery SQL: working with an array? 【发布时间】:2020-03-20 15:19:59 【问题描述】:我是 SQL 和 Google BigQuery 的新手。 我正在尝试运行以下查询以获取名称和计数列表,但是我看到我收到一个数组错误并且不知道如何修复它。任何帮助表示赞赏。
错误信息:
无法访问在 [5:27] 与 ARRAY 类型的值协调的字段
#standardSQL
-- Applications_Per_Assignee
SELECT assignee_harmonized.name AS Assignee_Name, COUNT(*) AS Number_of_Patent_Apps
FROM (
SELECT ANY_VALUE(assignee.harmonized.name) AS Assignee_Name
FROM `patents-public-data.patents.publications` AS patentsdb
GROUP BY Number_of_Patent_Apps
)
GROUP BY assignee_harmonized.name
ORDER BY Number_of_Patent_Apps DESC;
【问题讨论】:
你好@Marko43,欢迎来到 SO。您至少应该将整个错误消息与这些问题一起发布。您可以edit您的问题添加它。 【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT
ah.name AS Assignee_Name,
COUNT(*) AS Number_of_Patent_Apps
FROM `patents-public-data.patents.publications`,
UNNEST(assignee_harmonized) ah
GROUP BY Assignee_Name
HAVING Number_of_Patent_Apps < 1000
ORDER BY Number_of_Patent_Apps DESC
-- LIMIT 10
有输出
Row Assignee_Name Number_of_Patent_Apps
1 SAMSUNG ELECTRONICS CO LTD 600678
2 CANON KK 579731
3 MATSUSHITA ELECTRIC IND CO LTD 560644
4 HITACHI LTD 531286
5 SIEMENS AG 486276
6 MITSUBISHI ELECTRIC CORP 461673
7 IBM 438822
8 SONY CORP 438039
9 FUJITSU LTD 384270
10 NEC CORP 357193
【讨论】:
米哈伊尔,还有一个问题。如果我想使用逻辑运算符来过滤计数,我发现插入 WHERE COUNT(*)HAVING Number_of_Patent_Apps < 1000
- 请参阅答案中的更新【参考方案2】:
您的查询似乎有一些问题。
assignee
是一个字符串,我想你要看assignee_harmonized.name
你会想UNNEST()
assignee_harmonized
ANY_VALUE()
只选择一个随机值,听起来不像你想要的
您的内部选择中有一个GROUP BY
,它不会给您想要的结果
对于此类查询,您实际上并不需要子查询。
#standardSQL
SELECT ah.name AS Assignee_Name, COUNT(*) AS Number_of_Patent_Apps
FROM `patents-public-data.patents.publications` AS patentsdb
LEFT JOIN UNNEST(assignee_harmonized) ah
GROUP BY 1
ORDER BY 2 DESC
【讨论】:
以上是关于Google BigQuery SQL:使用数组?的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery SQL:从 JSON(列表和数组)中提取数据到列中
BigQuery 中用于 Google Analytics 数据的标准 SQL 还是旧版 SQL?