在 BigQuery 中使用双数组取消嵌套 STRUCT
Posted
技术标签:
【中文标题】在 BigQuery 中使用双数组取消嵌套 STRUCT【英文标题】:Unnest STRUCT with double array in BigQuery 【发布时间】:2021-09-15 11:23:19 【问题描述】:我正在尝试找到一种在共享 SQL sn-p 时共享一些示例数据(下面的“Some_Data”)的方法,以便演示功能。
我知道我可以使用一系列 UNION ALL 语句来做到这一点,但我想减少行数(这在本示例中并不重要,但假设我们有 20 多行)。
我认为我可以使用数组和结构来做到这一点,我已经设法让它工作,但代码看起来真的很乱,我希望有人能建议我如何简化它?
WITH
Some_Data AS (
SELECT
[STRUCT
(
["a", "b"] AS letters,
[1, 2] AS numbers
)
] AS Data_Sample
)
SELECT t_numbers, t_letters FROM
((
SELECT letters, numbers
FROM Some_Data s
CROSS JOIN UNNEST(s.Data_Sample)
)) t
CROSS JOIN UNNEST(t.numbers) as t_numbers WITH OFFSET nm
LEFT JOIN UNNEST(t.letters) as t_letters WITH OFFSET lt
ON nm = lt
输出(如预期):
Row | t_numbers | t_letters |
---|---|---|
1 | 1 | a |
2 | 2 | b |
【问题讨论】:
【参考方案1】:我希望有人能建议我如何简化它?
考虑以下方法(在我看来更简单,更简洁)
select number, letter
from Some_Data t, t.Data_Sample el,
el.letters letter with offset
join el.numbers number with offset
using(offset)
如果应用于您问题中的样本数据 - 输出是
【讨论】:
以上是关于在 BigQuery 中使用双数组取消嵌套 STRUCT的主要内容,如果未能解决你的问题,请参考以下文章