Google Bigquery 查询记录数据 - 专利

Google Bigquery query Record data - Patents

我正在使用 Google Patents Public Dataset 使用 CPC 代码“A01N”提取有关杀虫剂的专利信息 PRESERVATION OF BODIES OF HUMANS OR ANIMALS OR PLANTS OR PARTS THEREOF

但是当我 运行 以下查询时,我没有获得所有结果,因为如果我 运行 是一个非嵌套查询。见下文

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
country_code 数量
1 美国 67280
2 CN 59067
3 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
country_code 数量
1 美国 77056
2 CN 70654
3 EP 60291
4 39624
5 日本 36135

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

UNNEST输入的列中的某些行是空数组。当您执行隐式 CROSS JOIN 时,您加入了一个 NULL,这不会给您带来任何结果,因此其中一些行会消失并且您的计数会降低。如果您开始注释掉其中的一些 CROSS JOIN,您会看到您的计数开始上升。由于您实际上并未使用这些列,因此应将它们从查询中删除。如果您稍后需要它们,请先获取计数,然后 LEFT JOIN 诸如 1=1.