微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BigQuery将嵌套表连接到另一个表

如何解决BigQuery将嵌套表连接到另一个表

我正在尝试将一些项目数据(表1)的表与嵌套的项目ID的数组连接到,并将另一个表与项目数据(表2)(在这里顺序很重要

table1
proj_date     num_proj_per_day     proj_size     proj_id(nested)
1/1/2020      4                    150           a123
                                                 b456
                                                 c789
table2
proj_id(not nested)    proj_loc       lots_of_other_proj_fields....
a123                   Los Angeles
b456                   New York
c798                   Los Angeles
d012                   Denver
....                   ....

期望的结果

proj_date     num_proj_per_day     proj_size     proj_id(unnested)   pro_loc    
1/1/2020      4                    150           a123                Los Angeles
1/1/2020      4                    150           b456                New York
1/1/2020      4                    150           c789                Los Angeles

如果我使用table1作为from编写sql代码,然后交叉联接unnest(proj_id),然后左联接table2,则能够实现此结果。 问题是我需要在from语句中包含table2,然后在未嵌套的(proj_id)上加入table1 。不幸的是,排序很重要,因为我必须将此新数据集(table1)合并到Looker中的现有数据集/框架(table2)

如何获得正确结果但不适用于我的应用的示例

SELECT 
 table1.*,table2.proj_loc
FROM table1
CROSS JOIN UNnesT(table1.proj_id) as unnested
LEFT JOIN table2
 ON table2.proj_id = unnested.proj_id

我正在寻找类似下面的内容,但是您不能将嵌套嵌套在ON子句中-bigquery弹出错误“意外关键字UNnesT”

SELECT 
 table1.*,table2.proj_loc
FROM table2
LEFT JOIN table1
 ON UNnesT(table1.proj_id)=table2.proj_id

提前谢谢您,让我知道是否需要澄清信息

解决方法

以下是用于BigQuery标准SQL

update

您可以使用问题中的示例数据来测试,玩转上面的示例

update mytable t
inner join (
    select invoice,item,row_number() over(partition by invoice order by item) rn
    from mytable 
) t1 on t1.invoice = t.invoice and t1.item = t.item
set t.tax = 0
where t1.rn > 1

有输出

#standardSQL
SELECT proj_date,num_proj_per_day,proj_size,t2.*
FROM `project.dataset.table2` t2
JOIN `project.dataset.table1` t1 
ON t2.proj_id IN UNNEST(t1.proj_id)   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。