我的目标是使用标准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”相关联,否则将失去具有统一值的目的。
您正在查询一个字符串和两个数组-整个过程基本上看起来像这样:
{ "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中的表。