繁体   English   中英

非嵌套整数数组 SQL BigQuery

[英]Unnest array of integers SQL BigQuery

我似乎找不到任何有助于在 SQL BigQuery 中取消嵌套整数列表的内容。 我尝试使用 my_table, unnest(column) 中的 select * 作为列,但出现此错误:
UNNEST 中引用的值必须是 arrays。 UNNEST 包含 STRUCT<os STRING, product_ids STRING... 类型的表达式

|产品编号|
|[123456,234567,345678,456789]|
|[987654,876543,765432,654321]|

我基本上想得到它,这样我就可以将每个产品编号放在单独的一行上。 所以...
|产品编号|
|123456|
|234567|
|345678|
|456789|
|987654|
|876543|
|765432|
|654321|

根据错误消息,您的结构中似乎还有其他字段。 要取消嵌套,您需要隔离数组,请尝试以下操作:

with sample_data as (
  select [STRUCT('linux' as os, [123456,234567,345678,456789] as product_id),
          STRUCT('macos' as os, [987654,876543,765432,654321] as product_id)] as values
)

select pid
from sample_data,
UNNEST(values) v,
UNNEST(v.product_id) pid

为您提供 4 种解决方案,看看哪一种适合您的情况:

-- Solution1  
select product_id from 
(select "123,234,345,456,456,678,789" as product_ids),unnest(split(product_ids)) as product_id


--Solution2
select product_id from 
(select struct("ios" as os, "123,234,345,456,456,678,789" as product_ids) as os_products), unnest(split(os_products.product_ids)) as product_id

--Solution3
select product_id from 
(select array_agg(os_products) as os_products from 
(select struct("ios" as os, "123,234,345,456,456,678,789" as product_ids) as os_products
union all 
select struct("android" as os, "abc,cde,efg" as product_ids) as os_products
)), unnest(os_products) as op, unnest(split(op.product_ids)) as product_id

--Solution4
select product_id from 
(select array_agg(os_products) as os_products from 
(select struct("ios" as os, split("123,234,345,456,456,678,789") as product_ids) as os_products
union all 
select struct("android" as os, split("abc,cde,efg") as product_ids) as os_products
)), unnest(os_products) as op, unnest((op.product_ids)) as product_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM