2017-02-20 6 views
1

У меня есть стол. Одна из его колонок имеет тип 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. 

Я понимаю, что я не могу передать функцию а array<string>, но что я могу сделать?

comment является столбец типа array<string>

Это, как я запустить его.

hive -f CALC_FILE.sql > 20170220.txt 
+0

P.S. - Лучший способ получить хороший быстрый ответ - предоставить «show create table» и образец данных. –

ответ

2

использование 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 
; 
+0

Это было полезно, но не решило проблему. Проблема состоит в том, что 'comment' имеет тип array . Это басикально 'collect_set (collect_set (some_column))'. Таким образом, ошибка все еще появляется. Я хотел бы знать, есть ли способ расщепления 'collect_set (some_column)' на строки, чтобы я мог снова собрать значения. Или, может быть, есть способ разделения строки val1, val2, так что при группировке по ключу и коду я могу получить только унифицированные значения. –

+0

См. Отредактированный ответ (ws_concat) –

+0

P.s. Вы можете использовать 'collect_list' вместо' collect_set' –

0

попробовать с помощью:

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; 
Смежные вопросы