Google Bigquery 查询记录数据 - 专利

Posted

技术标签:

【中文标题】Google Bigquery 查询记录数据 - 专利【英文标题】:Google Bigquery query Record data - Patents 【发布时间】:2021-05-31 14:41:55 【问题描述】:

我正在使用Google Patents Public Dataset提取有关使用CPC代码“A01N”保存人体或动物或其植物或其部分的农药的专利信息

但是当我运行以下查询时,我并没有像运行非嵌套查询那样获得所有结果。见下文

SELECT patents.country_code, count(DISTINCT publication_number) as quantity
FROM
  `patents-public-data.patents.publications` AS patents,
  UNNEST(title_localized) AS title,
  UNNEST(abstract_localized) AS abstract,
  UNNEST(cpc) AS cpc_code,
  UNNEST(inventor_harmonized) AS inventor,
  UNNEST(assignee_harmonized) AS assignee
WHERE 
  cpc_code.code LIKE '%A01N%'
GROUP BY patents.country_code
ORDER BY quantity DESC
Row country_code quantity
1 US 67280
2 CN 59067
3 WO 39560
4 EP 37886
5 CA 23115
SELECT patents.country_code, count(DISTINCT publication_number) as quantity
FROM
  `patents-public-data.patents.publications` AS patents,
  UNNEST(cpc) AS cpc_code
WHERE 
  cpc_code.code LIKE '%A01N%'
GROUP BY country_code
ORDER BY quantity DESC
Row country_code quantity
1 US 77056
2 CN 70654
3 EP 60291
4 WO 39624
5 JP 36135

我不明白为什么两个结果之间存在差异,因为没有应用更多过滤器? 当我 UNNEST 更多列时,如何维护所有行?

【问题讨论】:

【参考方案1】:

UNNESTing 的列中的某些行是空数组。当您执行隐式CROSS JOIN 时,您将加入NULL,它不会给您任何结果,因此其中一些行会消失并且您的计数会减少。如果您开始评论其中一些CROSS JOINs,您会看到您的计数开始上升。由于您实际上并未使用这些列,因此您应该将它们从查询中删除。如果您稍后需要它们,请先获取计数,然后在 LEFT JOIN 上获取类似 1=1 的信息。

【讨论】:

以上是关于Google Bigquery 查询记录数据 - 专利的主要内容,如果未能解决你的问题,请参考以下文章

标准 sql 查询以获取与另一个表匹配的记录字段(Google BigQuery)

带有“Order Each by”子句的 Google BigQuery 大表(105M 记录)产生“资源超出查询执行”错误

Google BigQuery 选择记录中所有嵌套字段的总和

有效地将Pandas数据帧写入Google BigQuery

获取 Google BigQuery 中值的最后一次更改时间

由于数据类型,无法查询从 Google 表格加载的 BigQuery 表