hviesql及sparksql数组及数组嵌套json的生成和解析

1、数组字符串
数据样例:["car1","car2","car3"]
sql实现:  
select
      id
      ,concat('["',(concat_ws('","',collect_list(car_name  ))),'"]')        as   car_names
from 
(
      select
          id
          ,car_name  
      from  table_name
      where  pt_d ='' 
)t
group by id
;


2、二维数组
数据样例
[{"age":"1","car_names":["car1","car2"]}
,{"age":"2","car_names":["car1","car2","car3"]}
]

sql实现:
select
    id
   ,concat('[',(concat_ws(',',collect_list(age_car_names))),']')                    as     age_car_names
from 
(
select
    id
  ,concat('{"age":"',age,'","car_names":',car_names,'}')    as  age_car_names
from 
(
  select
      id,age
      ,concat('["',(concat_ws('","',collect_list(car_name  ))),'"]')        as   car_names
  from table_name
  group by id,age
)t2
)t3
group by id
sparksql
select 
        id 
        ,concat('[',concat_ws(',',collect_set(to_json(struct(age,car_name)))),']')  as age_car_names
from table_name
group by 
    id


3、解析数组字符串
数据样例:["car1","car2","car3"]
解析后:
car_name
car1
car2
car3
select              
      explode(split(regexp_replace(car_names,'^\\[|\\]$|"',''),',')) as car_name                        
from table_name

4、解析二维数组
[{"age":"1","car_names":["car1","car2"]}
,{"age":"2","car_names":["car1","car2","car3"]}
]
解析后
age car_name
1    car1
1    car2
2    car1
2    car2
2    car3

select 
     age
     ,car_name
from 
(
    select    
           from_json(coalesce(age_car_names,'[""]'),'array<string>') as  age_car_names
    from table_name
) t11
lateral view explode(age_car_names) t12 as age_car_names_json
lateral view json_tuple(age_car_names_json,'age','car_name') t13 as age,car_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值