我的目标是使用标准的SQL从谷歌的Big Query patents-public-data.patents.publications_201710表创建一个表,其中有一行用于publication_number、assignee和assignee_harmonized.name,其中publication_number对具有多个assignee的记录重复。下面是我想要的输出示例:
publication_number|assignee|assignee_harm
US-6044964-A|索尼公司|索尼公司
US-6044964-A|数字音频光盘公司|数字音频光盘公司
US-8746747-B2|IPS公司-焊接部|IPS公司-焊接部
US-8746747-B2|空|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')但是,输出显示如下:
row|publication_number|assignee|assignee_harm
1|US-6044964-A|索尼公司|索尼公司
|Digital Audio Disc Corporation
2|US-6044964-A|索尼公司|数字音频光盘公司
|Digital Audio Disc Corporation
3|US-8746747-B2|IPS公司-焊接部|MCPHERSON TERRY R
4|US-8746747-B2|IPS公司-焊接部|IPS公司-焊接部
您可以看到,“索尼公司”的受让人与第2行中的“数字音频光盘公司”协调名称有不恰当的关联,类似的问题出现在第3行中。此外,第1行和第2行各包含两行,但不重复publication_number标识符。我看不到一种简单的方法来做到这一点,因为"assignee“的数量并不总是等于"assignee_harmonized.name”的数量,它们也不总是以相同的顺序出现(否则我可以尝试创建两个表并以某种方式合并它们)。另一方面,必须有一种方法将“受让人”变量与其协调值"assignee_harmonized.name“相关联,否则就失去了协调值的目的。当有多个"assignee“或多个"assignee_harmonized.name”或同时有多个“assignee”和/或多个“assignee”时,您能推荐一个查询(或一组查询)来生成所需的输出吗?
发布于 2017-12-31 20:27:58
您查询的是一个字符串和两个数组-整个过程基本上是这样的:
{
"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中的表。
https://stackoverflow.com/questions/48037397
复制相似问题