sql—在配置单元中使用数组和集

9gm1akwq  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(639)

我有一张table。其中一列的类型为 array<string> . 我尝试对此表运行查询,然后将数据加载到文件中。
这是查询

Select concat(key, '|'
  , code, '|'
  , round(sum(amt), 4), '|'
  , count(*)
  , collect_set(comment))
from test_agg
where TIME_KEY = '2017-02-19'
group by key, code;

但是我犯了个错误

FAILED: UDFArgumentTypeException Only primitive type arguments are accepted but array<string> was passed as parameter 1.

我知道我不能传递函数a array<string> ,但我能做什么呢? comment 是类型的列 array<string> 我就是这样做的。

hive -f CALC_FILE.sql > 20170220.txt
jaql4c8m

jaql4c8m1#

使用 concat_ws 转换 comment 数组到字符串,将 collect_set 结果,然后将其连接到其余列

select      concat_ws
            (
                '|'
               ,key
               ,code
               ,round(sum(amt),4)
               ,count(*) 
               ,concat_ws('<<<>>>',collect_set(ws_concat('~~~',comment)))
            )

from        test_agg

where       time_key = '2017-02-19'

group by    key
           ,code
;
w9apscun

w9apscun2#

尝试使用:

Select concat(key, '|'
  , code, '|'
  , round(sum(amt), 4), '|'
  , count(*)
  , collect_set(comment[0]))
from test_agg
where TIME_KEY = '2017-02-19'
group by key, code;

相关问题