2014-12-22 3 views
-1

У меня есть таблица hive со структурой столбца. Мне нужно запустить запрос, чтобы собрать несколько строк этого столбца в массив.Нужно сгруппировать тип структуры в массив

Конечный результат должен быть массив структуры < ....>

Я попытался «collect_set», но он дает мне ошибку, что она не может быть использована для сложных типов. Мне нужен какой-то «group_concat», как в mySSQL.

Есть ли у вас какие-либо идеи, как я могу это достичь (желательно без использования udf/udaf)?

Спасибо.

ОБНОВЛЕНИЕ: У меня есть временное решение с использованием UDAF. Но мне интересно, возможно ли это со встроенными функциями.

+0

Пожалуйста, включите ваш код, чтобы мы могли легче помочь. – ArtOfCode

ответ

0

Это работает?

SELECT collect_set(column_containing_struct.struct_field_name) FROM your_table; 
-- Or some variant of this 

Это предполагает несколько вещей:

  • Ваша таблица содержит столбец с именем "column_containing_struct", который содержит структуры.
  • Структура в этом столбце содержит поле с именем "struct_field_name".
  • Что вы пытаетесь сделать, это создать массив всех уникальных значений, которые встречаются в этом поле структуры.

Если вы не пытаетесь дедуплицировать и хотите, чтобы все, что когда-либо появлялось там, используйте вместо этого collect_list.

+0

К сожалению, это не работает для меня. В конце мне нужно: массив >. Что ваш запрос предоставляет массив <примитивный тип> – maze2002

+0

@ maze2002 Ах, теперь я понимаю вашу цель более четко. Я рад, что вы разработали хотя бы временное решение. – rchang

Смежные вопросы