在 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
我正在尝试使用 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