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

连接两个表以在BigQuery上创建一个大嵌套表时如何按表A的所有列分组?

如何解决连接两个表以在BigQuery上创建一个大嵌套表时如何按表A的所有列分组?

我正在尝试创建一个大型嵌套表,该表将由许多表组成,例如我的客户表、电话号码、电子邮件......它们都有共同的 client_id 字段。 目前,我必须遵循运行良好的查询(“加入”客户表字段和相应的电话号码字段):

SELECT Clients.*,ARRAY_AGG( STRUCT(Timestamp,Country_Code,Local_Number,Phone_Number,Whatsapp)) as Phones
FROM Clients LEFT JOIN Phones USING(client_id)
GROUP BY Client.client_id,Clients.Timestamp,Clients.First_Name,Clients.Last_Name,Clients.dob

Client.client_id,Clients.dob 是我在 Clients 表中的所有字段。 我想将此查询用作子查询,以类似的方式将其“加入”到 Emails 表中(使用和重命名查询的结果)。 问题是我想对 Clients 表的所有字段进行 GROUP BY,而不是每次都写它们。 GROUP BY Clients.* 和 GROUP BY ALL 都不起作用...

我能做些什么来缩短它?

解决方法

如果 client_id 是唯一的,那么您可以通过它进行聚合。您想要的是在执行此操作时获取所有列。一个非常 BigQuery 的方法是:

SELECT ANY_VALUE(c).*,ARRAY_AGG( STRUCT(p.Timestamp,p.Country_Code,p.Local_Number,p.Phone_Number,p.Whatsapp)) as Phones
FROM Clients c LEFT JOIN
     Phones p
     USING (client_id)
GROUP BY c.client_id;

当我运行它时效果很好:

WITH clients as (
      select 'x' as name,1 as client_id union all 
      select 'y' as name,2 as client_id
    ),phones as (
        select current_timestamp as timestamp,1 as client_id,'abc' as country_code,111 as local_number,222 as phone_number,null as whatsapp
    )
SELECT ANY_VALUE(c).*,p.Whatsapp)) as Phones
FROM Clients c LEFT JOIN
     Phones p
     USING (client_id)
GROUP BY c.client_id;
,

试试下面的

SELECT ANY_VALUE(c).*,ARRAY_AGG((SELECT AS STRUCT p.* EXCEPT(client_id))) as Phones
FROM Clients c 
LEFT JOIN Phones p
USING (client_id)
GROUP BY c.client_id

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