2017-01-20 5 views
1

Я пытаюсь достичь чего-то, как показано ниже в HIVE.Сочетание двух рядов с a, in Hive

Входной сигнал:

Col1 Col2 Col3 Col4 Col5 
A1 B1  C1 D1 E1 
A1 B1  C2 D1 E1 
A3 B3  C3 D3 E3 
A4 B4  C4 D4 E4 

Выход:

Col1 Col2 Col3 Col4 Col5 
A1 B1 C1,C2 D1 E1 
A3 B3  C3 D3 E3 
A4 B4  C4 D4 E4 

Ряд 1 и Ряд 2 одинаковы для Col3 на входе, за исключением. В выводе он должен быть разделен на , вместо двух рядов.

+0

Это может быть и для других столбцов? например: col1 отличается на 2 строки, а все остальные столбцы одинаковы? –

+0

нет. Это просто для Col3 – user2810706

ответ

3

collect_set делает именно то, что вы хотите. Ниже запрос должен сделать:

select col1, col2, col4, col5, concat_ws(",", collect_set(col3)) from <table> group by col1, col2, col4, col5; 

collect_set удаляет дубликаты дает вам уникальный список. Если у вас есть дубликаты в col3 и вы хотите их сохранить, вы можете использовать collect_list. Поэтому, если ваш col3 имеет C1, C1, C2; использование collect_set дает «C1, C2». Использование collect_list дает «C1, C1, C2»

Редактировать: concat_ws преобразует вывод в требуемом формате.

+0

Он делает магию, но он объединяет значение с помощью '[' 'и' ']'. В любом случае, что можно было бы обработать ... Спасибо за ответ – user2810706

+0

Я отредактировал свой ответ. Вы можете использовать concat_ws для его анализа в требуемом формате. –