admin

Google使用SQL的大查询:当有多个受让人时,将受让人名称和统一的受让人名称关联

sql

我的目标是使用标准SQL从Google的Big Query patents-public-
data.patents.publications_201710表中创建一个表,该表的publication_number,assignee和assignee_harmonized.name一行,其中对具有多个受让人的记录重复该publication_number。这是我想要的输出的示例:

出版物编号|受让人|受让人伤害

US-6044964-A |索尼公司| SONY CORP

US-6044964-A |数字音频光盘公司|数字音频光盘公司

US-8746747-B2 | IPS公司的“生产部门” | IPS公司的“ ELD ON DIVISION”

US-8746747-B2 | null | MCPHERSON TERRY R

我已经根据这篇文章中发现的UNNEST建议尝试了以下查询

#standard SQL
SELECT
  p.publication_number,
  p.assignee,
  a.name AS assignee_harm
FROM
  `patents-public-data.patents.publications_201710` AS p,
  UNNEST(assignee_harmonized) AS a
WHERE
  p.publication_number IN ('US-6044964-A',
    'US-8746747-B2')

但是,输出如下所示:

行|出版物编号|受让人|受让人伤害

1 | US-6044964-A | Sony Corporation | SONY CORP

||数字音频光盘公司|

2 | US-6044964-A | Sony Corporation | DIGITAL AUDIO DISC CORP

||数字音频光盘公司|

3 | US-8746747-B2 | IPS公司的生产部门| MCPHERSON TERRY R

4 | US-8746747-B2 | IPS公司的实地分部| IPS公司的ELD ON DIVISION

您会看到“ Sony Corporation”的受让人与第2行中的“ DIGITAL AUDIO DISC
CORP”统一名称不适当地关联,在第3行中也出现了类似的问题。而且,第1行和第2行各包含两行,但不再重复publication_number标识符。我看不到一种直接的方法,因为“
assignee”的数量并不总是等于“
assignee_harmonized.name”的数量,而且它们也不一定总是以相同的顺序出现(否则,我可以尝试创建两个表并以某种方式合并它们)。另一方面,必须有一种方法将“
assignee”变量与其统一值“ assignee_harmonized.name”相关联,否则将失去具有统一值的目的。


阅读 261

收藏
2021-07-01

共1个答案

admin

您正在查询一个字符串和两个数组-整个过程基本上看起来像这样:

  {
    "publication_number": "US-8746747-B2",
    "assignee": [
      "IPS Corporation鈥擶eld-On Division"
    ],
    "assignee_harm": [
      "MCPHERSON TERRY R",
      "IPS CORPORATION鈥擶ELD ON DIVISION"
    ]
  }

这就是数据,您需要以某种方式决定如何对待它们的组合……要么交叉连接所有内容:

#standard SQL
SELECT
  p.publication_number,
  assignee,
  assignee_harmonized.name  AS assignee_harm
FROM
  `patents-public-data.patents.publications_201710` AS p
  ,p.assignee assignee
  ,p.assignee_harmonized AS assignee_harmonized
WHERE
  p.publication_number IN ('US-6044964-A','US-8746747-B2')

..它为您提供关系数据..或将其保留为两个单独的数组:

#standard SQL
SELECT
  p.publication_number,
  assignee,
  ARRAY( (SELECT name FROM p.assignee_harmonized)) AS assignee_harm
FROM
  `patents-public-data.patents.publications_201710` AS p
WHERE
  p.publication_number IN ('US-6044964-A','US-8746747-B2')

您也可以将此嵌套结果另存为bq中的表。

2021-07-01