BigQuery 中的 PIVOT 嵌套数组,无需连接键

问题描述 投票:0回答:1

我看到了一些类似的问题,但找不到适合我的问题的答案。我认为我正在努力解决的是我想要解除嵌套的数组没有任何连接键(或者也许我不明白我面临的问题)。

所以我有这个数据集:

with raw as (
      select 
        ['a','b','c','d'] as keys,
        [1,2,3,4] values 
      union all 
      select 
        ['a','b','c','d']  ,
        [5,6,7,8]
    )

    select
      *
    from
      raw

我希望每个键都有一列,其对应的值作为行。

到目前为止,我有类似的东西,但我有点卡住了。我认为我需要在某个时候使用偏移,但我不确定如何以及在哪里......

with raw as (
      select 
        ['a','b','c','d'] as keys,
        [1,2,3,4] values 
      union all 
      select 
        ['a','b','c','d']  ,
        [5,6,7,8]
    )
    
    select
      *
    from (
      select
        *
      from raw,
      unnest(keys) as un_keys,
      unnest(values) as un_values
    )
    pivot(max(un_values) for un_keys in ('a','b'))
sql arrays google-bigquery pivot
1个回答
0
投票

以下应该有帮助

WITH raw AS (
  SELECT ['a','b','c','d'] AS keys, [1,2,3,4] VALUES UNION ALL 
  SELECT ['a','b','c','d'], [5,6,7,8]
)
SELECT * EXCEPT(line) FROM (
SELECT line, key, VALUE FROM (
  SELECT *, ROW_NUMBER() OVER() AS line FROM raw 
), UNNEST(keys) AS key WITH OFFSET
JOIN UNNEST(VALUES) AS VALUE WITH OFFSET
USING (OFFSET))
PIVOT(ANY_VALUE(VALUE) FOR key IN ('a', 'b', 'c', 'd'))    

有输出

© www.soinside.com 2019 - 2024. All rights reserved.