【踩坑实录】-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解决了~