【踩坑实录】-The function STRING takes only primitive types

目录

一、背景

二、分析并定位原因

三、执行内容

四、解决


一、背景

在执行sql任务时出现了报错,内容如下:

The function STRING takes only primitive types

二、分析并定位原因

从翻译内容来看可知是因为字段的数据类型导致的报错,关键信息string说明是string类型的字段有问题

三、执行内容

接下来就开始仔细看看我们执行的sql内容了。

create table test_db.target_tablename(
id   string,
name string
)
stored as orc;


insert overwrite table test_db.target_tablename
select 
     t.id
    ,collect_set(value) as target_value
from (
     select 
          a.id
         ,concat_ws(',',collect_set(a.name) as name_concat
     from test_db.test_tablename1 a 
     left join test_db.test_tablename2 b 
        on a.id=b.id
     group by 
          a.id
     ) t 
lateral view explode (split(name_concat,',')) t as value
group by 
     t.id
;

由上可知,是将array<string>类型的数据写入string类型引起的报错。

四、解决

insert overwrite table test_db.target_tablename
select 
     t.id
    ,nvl(concat('{',concat_ws(',',collect_set(value)),'}'),'{}')  as target_value
from (
     select 
          a.id
         ,concat_ws(',',collect_set(a.name) as name_concat
     from test_db.test_tablename1 a 
     left join test_db.test_tablename2 b 
        on a.id=b.id
     group by 
          a.id
     ) t 
lateral view explode (split(name_concat,',')) t as value
group by 
     t.id
;

拼接上字符串,成功将array类型转为string,bug解决了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值