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 &lt; 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:使用数组?的主要内容,如果未能解决你的问题,请参考以下文章

在 sql google BigQuery 中访问数组

Google BigQuery SQL:从 JSON(列表和数组)中提取数据到列中

BigQuery 中用于 Google Analytics 数据的标准 SQL 还是旧版 SQL?

Google BigQuery 的 SQL 语法不存在

Google BigQuery 中的 TIMESTAMP 和标准 SQL

Google Analytics 到 Bigquery 数据 - 自定义维度的 SQL 代码是啥?