谷歌';s使用SQL的大查询:当有多个受让人时,关联受让人名称和协调受让人名称

谷歌';s使用SQL的大查询:当有多个受让人时,关联受让人名称和协调受让人名称,sql,google-bigquery,Sql,Google Bigquery,我的目标是使用标准SQL从Google的大查询patents-public-data.patents.publications_201710表创建一个表,该表中有一行用于出版物编号、受让人和受让人名称,其中出版物编号对具有多个受让人的记录重复。以下是我所需输出的示例: 出版物编号|受让人|受让人| US-6044964-A |索尼公司|索尼公司 US-6044964-A |数字音频光盘公司|数字音频光盘公司 US-8746747-B2 | IPS公司分部焊接| IPS公司分部焊接 US-8746

我的目标是使用标准SQL从Google的大查询patents-public-data.patents.publications_201710表创建一个表,该表中有一行用于出版物编号、受让人和受让人名称,其中出版物编号对具有多个受让人的记录重复。以下是我所需输出的示例:

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

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

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

US-8746747-B2 | IPS公司分部焊接| IPS公司分部焊接

US-8746747-B2 |空|麦克弗森特里R

我根据在中找到的最不重要的建议尝试了以下查询

但是,输出如下所示:

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

1 | US-6044964-A |索尼公司|索尼公司

||数字音频光盘公司|

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

||数字音频光盘公司|

3 | US-8746747-B2 | IPS公司焊接分部|麦克弗森特里R

4 | US-8746747-B2 | IPS公司分部焊接| IPS公司分部焊接


您可以看到,“Sony Corporation”受让人与第2行中的“DIGITAL AUDIO DISC CORP”协调名称不恰当地关联,第3行中出现了类似问题。此外,第1行和第2行各包含两行,但不重复出版物编号标识符。我看不到一个简单的方法来实现这一点,因为“assignee”的数量并不总是等于“assignee_.name”的数量,而且它们也不总是以相同的顺序出现(否则我可以尝试创建两个表并以某种方式合并它们)。另一方面,必须有一种方法将“assignee”变量与其协调值“assignee_conmonized.name”关联起来,否则就失去了获得协调值的目的。当存在多个“assignee”或多个“assignee\u.name”或两者同时存在时,您可以建议一个查询(或一组查询)来生成所需的输出吗?

您正在查询一个字符串和两个数组-整个过程基本上如下所示:

  {
    "publication_number": "US-8746747-B2",
    "assignee": [
      "IPS Corporation—Weld-On Division"
    ],
    "assignee_harm": [
      "MCPHERSON TERRY R",
      "IPS CORPORATION—WELD 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中的表

#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')