使用SQL的Google大查询:当有多个受让人时,将受让人姓名和协调受让人姓名相关联

时间:2017-12-30 19:58:48

标签: sql google-bigquery

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

publication_number |受让人| assignee_harm

US-6044964-A | Sony Corporation | SONY CORP

US-6044964-A |数字音频光盘公司| DIGITAL AUDIO DISC CORP

US-8746747-B2 | IPS Corporation-Weld-On Division | IPS CORPORATION-WELD ON DIVISION

US-8746747-B2 | null | MCPHERSON TERRY R

我已根据this post

中找到的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')

但是,输出显示如下:

行| publication_number |受让人| assignee_harm

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

|| Digital Audio Disc Corporation |

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

|| Digital Audio Disc Corporation |

3 | US-8746747-B2 | IPS Corporation-Weld-On Division | MCPHERSON TERRY R

4 | US-8746747-B2 | IPS Corporation-Weld-On Division | IPS CORPORATION-WELD ON DIVISION

你可以看到"索尼公司"受让人与" DIGITAL AUDIO DISC CORP" DIGITAL AUDIO DISC CORP"第2行中的协调名称,第3行中出现类似问题。此外,第1行和第2行各包含两行但不重复publication_number标识符。我没有看到一种直截了当的方式来做这件事,因为受让人的数量是#34;并不总是等于" assignee_harmonized.name"并且它们并不总是以相同的顺序出现(否则我可以尝试创建两个表并以某种方式合并它们)。另一方面,必须有一种方式来关联"受让人"变量及其协调值" assignee_harmonized.name",否则失去协调值的目的。你能否建议一个查询(或一组查询),当有多个"受让人"时,它会产生所需的输出。或多个" assignee_harmonized.name"或两者兼而有之?

1 个答案:

答案 0 :(得分:2)

你正在查询一个字符串和两个数组 - 整个事情基本上是这样的:

  {
    "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中的表格。