更新时间:2023-02-18 13:30:47
您可以使用Brickhouse CollectUDAF构建 map
.阅读说明如何构建JAR ,添加jar,创建函数并使用它:>
You can build map
using brickhouse CollectUDAF. Read instructions how to build JAR, add jar, create function and use it:
add jar /path/to/jar/brickhouse-0.7.1.jar;
create temporary function collect as 'brickhouse.udf.collect.CollectUDAF';
SELECT yyyy_mm_dd,
hotel_id,
primary_prov,
collect(prov_id, prov_id_api ) as detailed_prov
FROM
(
SELECT
yyyy_mm_dd,
hotel_id,
max(case when rn=1 then prov_id else null end) over(partition by yyyy_mm_dd, hotel_id) as primary_prov,
collect_set(api) over (partition by yyyy_mm_dd, hotel_id, prov_id) prov_id_api, --re-assemple array to include all elements from multiple initial arrays if there are different arrays per prov_id
prov_id
FROM(
SELECT
yyyy_mm_dd,
hotel_id,
prov_id,
apis_xml,
api,
ROW_NUMBER() OVER(PARTITION BY yyyy_mm_dd, hotel_id ORDER BY api) rn
FROM(
SELECT
t.yyyy_mm_dd,
t.hotel_id,
t.prov_id,
t.apis_xml,
CAST(e.apis_xml_element AS INT) AS api
FROM
my_table t
LATERAL VIEW EXPLODE(apis_xml) e AS apis_xml_element
)s
)s
)s
group by yyyy_mm_dd,
hotel_id,
primary_prov