在 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的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 BigQuery 中取消嵌套数组,以便将嵌套数据按键值拆分为列?

如何在 BigQuery 中取消嵌套多个数组?

如何在 BigQuery 标准 SQL 中取消嵌套多个数组

在 BigQuery 中查询双嵌套数组 [重复]

在 BigQuery 中取消嵌套 JSON 字符串化数组

在 BigQuery 中取消嵌套结构