在 Big Query 中制作连接表数组的最佳方法是什么?

Whats the best method of making arrays of joined tables in Big Query?

我正在尝试使用 SQL 在 Big Query 内部进行一些数据转换。

假设我有三个 table:

客户 - 有关客户的数据,如年龄等 订阅 - 有关用户订阅的数据 参与度——关于客户如何与数字产品互动的数据。

我想使用嵌套字段将其收集在一个 table 中。

我可以连接所有这些 table,但我想将它们聚合到数组中。

所以,我得到的不是三个 table:

id:123,
name:David,
age:30,
subscritions: [{
  name:sub1
  price:10
},
{
  name:sub2
  price:20
}],
engagment: [{
  event:visited_product_x
  time:2020-06-10
},
{
  event:visited_product_y
  time:2020-06-10
}]

当然我在SELECT中使用了array_agg。当只添加一个 table 时,效果很好。但是,当添加另一个时,我得到重复的行,这是我不想要的。所以,我想我不应该在 SELECT 中使用 array_agg,而应该在其他地方使用。

但是解决这个问题的最佳方法是什么?

您可以使用子查询来构造字段。像这样:

select c.*,
       (select array_agg(s)
        from substriptions s
        where s.user_id = c.user_id
       ) as subscriptions,
       (select array_agg(e)
        from engagements e
        where e.user_id = c.user_id
       ) as engagements
from customers c