BigQuery 从嵌套数组中选择和别名字段而不分组
Posted
技术标签:
【中文标题】BigQuery 从嵌套数组中选择和别名字段而不分组【英文标题】:BigQuery select and alias field from nested array without grouping 【发布时间】:2020-01-09 03:08:27 【问题描述】:我在 BigQuery 表中有一些数据,其中一个字段是结构数组。我试图基本上做一个SELECT *
,但为数组中的嵌套字段设置别名。这是一个简单的例子:
with array_of_records as (
select
'field1' as regular_field,
[struct ('arr_1a' as field_1, 'arr_1b' as field_2), struct ('arr_2a' as field_1, 'arr_2b' as field_2)] as array_field
)
select
regular_field,
array_agg (
struct (
array_entry.field_1 as field_a,
array_entry.field_2 as field_b
)
) as array_field
from array_of_records, unnest(array_field) array_entry
group by 1
有没有办法不用array_agg
和group_by
来做到这一点?我之所以问是因为该表有大量字段,并且我想避免除嵌套数组字段之外的所有字段进行分组。我意识到我也可以用 any_value()
之类的东西聚合每一列,但这似乎也不是一个特别干净的解决方案。
【问题讨论】:
【参考方案1】:我确实从经验中知道,将其作为子查询进行可能是一个巨大的胜利:
select regular_field,
(SELECT array_agg(struct(array_entry.field_1 as field_a, array_entry.field_2 as field_b))
FROM unnest(ar.array_field) array_entry
) as array_field
from array_of_records ar;
这避免了“全局”聚合,因此数据不必在大量节点之间移动。
【讨论】:
@PrratekRamchandani 。 . .凉爽的。大约一年前我遇到过类似的问题,并认为这个简单的更改会产生很大的影响。以上是关于BigQuery 从嵌套数组中选择和别名字段而不分组的主要内容,如果未能解决你的问题,请参考以下文章