首页 > 解决方案 > Google Bigquery 查询记录数据 - 专利

问题描述

我正在使用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
国家代码 数量
1 我们 67280
2 中国 59067
3 WO 39560
4 EP 37886
5 加州 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
国家代码 数量
1 我们 77056
2 中国 70654
3 EP 60291
4 WO 39624
5 J.P 36135

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

标签: mysqlgoogle-bigqueryrecord

解决方案


您正在输入的列中的某些行UNNEST是空数组。当您执行 implicitCROSS JOIN时,您加入的 aNULL不会给您任何结果,因此其中一些行会消失并且您的计数会减少。如果你开始注释掉其中的一些,CROSS JOIN你会看到你的计数开始上升。由于您实际上并未使用这些列,因此您应该将它们从查询中删除。如果您稍后想要它们,请先获取计数,然后再获取LEFT JOIN类似1=1.


推荐阅读