Можете ли вы добавить структуру в конец массива структур, возвращаемых collect_list в одном запросе Hive? - PullRequest
0 голосов
/ 15 февраля 2019

Для получения дополнительной информации о UDAF collect_list в Hive: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)

select
    'a' as A
    ,collect_list(struct(table1.item1,table1.item2,table1.item3)) --Array
            ||struct(table2.item1,table2.item2,table2.item3) --Struct 1
            ||struct(table3.item1,table3.item2,table3.item3) --Struct 2 
        as B
from
    table1 
join
    table2
on
    table1.thing = table2.thing
join
    table3
on
    table1.thing = table3.thing
group by
    'a'
    ,table2.item1
    ,table2.item2
    ,table2.item3
    ,table3.item1
    ,table3.item2
    ,table3.item3

Array: (returned from collect_list)
    [{table1.item1,table1.item2,table1.item3}    --structA
    ,{table1.item1,table1.item2,table1.item3}]   --structB

Struct 1:
    {table2.item1,table2.item2,table2.item3}

Struct 2:
    {table3.item1,table3.item2,table3.item3}

Desired result:

A    B
'a'  [{table1.item1,table1.item2,table1.item3},{table1.item1,table1.item2,table1.item3},{table2.item1,table2.item2,table2.item3},{table3.item1,table3.item2,table3.item3}]

В приведенном выше запросе я использую оператор конкатенации строк в качестве структуры "функции для добавления" в массивструктуры, которые будут возвращаться из collect_list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...