我的目标是使用标准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"或两者兼而有之?
答案 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中的表格。