将 JSON 值列表分解为 SNOWFLAKE 数据库表中的行

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)