SMR*_*SMR 5 sql arrays json snowflake-cloud-data-platform
我有一个如下屏幕截图所示的表,它基本上是一个 JSON,并被解析以获取下面的输出,现在我希望将 City 和 order 列中的值列表拆分为行。
有人可以帮我吗
期望的输出如下
小智 5
这是一种方法。首先去掉 [" 和 ]",因为 city 列中的双引号不包含单个数组元素,而是包含所有元素,然后标记字符串并使用 strtok_to_array 将其作为真实数组返回,然后将数组元素展平为单独的行并将行(城市)横向连接回记录的其余部分。
with data as
(select 'A' as name, 'M' as gender, '["completed"]' as orders, '["Cochi,Hyderabad"]' as city
union all
select 'B' as name, 'M' as gender, '["completed"]' as orders, '["Cochi,Hyderabad,Delhi"]' as city
union all
select 'C' as name, 'F' as gender, '["cancelled"]' as orders, '["Mumbai,Pune"]' as city
union all
select 'D' as name, 'M' as gender, '["pending"]' as orders, '["cochi"]' as city
)
, data2 as
( select d.name
, d.gender
, replace(replace(d.orders,'["',''),'"]','') as orders
, strtok_to_array(replace(replace(city,'["',''),'"]',''),',') as city
from data d
)
select d2.name
, d2.gender
, d2.orders
, replace(c.value,'"','') as city
from data2 d2
, lateral flatten(input => d2.city) c;
Run Code Online (Sandbox Code Playgroud)