gpt4 book ai didi

presto - 在 Presto 中添加两张 map

转载 作者:行者123 更新时间:2023-12-04 02:54:27 29 4
gpt4 key购买 nike

我的数据如下所述

customer_id   usage_month  usage_by_product         usage
1 June {"A":50, "B":50} 100
1 July {"A":50, "B":10, "C":20} 80
1 Aug {"A":50, "D":500} 550
1 Sep {"C" :30} 30

我想编写一个查询来汇总全年的总使用量

customer_id   usage_by_product    usage
1 {"A": 150, "B":60 760
"C": 50, "D":500}

是否可以在 Athena (Presto) 的 map 上进行这种聚合?

最佳答案

您可以使用 map_entries + UNNEST 将 map 拆分为单独的键/值对。然后,将值汇总并聚合回 map 中。

例如:

WITH input AS (
SELECT * FROM (VALUES
(1, map(array['a', 'c'], array[50, 42])),
(1, map(array['a', 'b'], array[50, 18]))
) t(customer_id, m)
),
sum_by_map_key AS (
SELECT customer_id, k, sum(v) AS s
FROM input
CROSS JOIN UNNEST(map_entries(m)) AS u(k, v)
GROUP BY customer_id, k
)
SELECT customer_id, map_agg(k, s)
FROM sum_by_map_key
GROUP BY customer_id;

输出:

 customer_id |        _col1
-------------+---------------------
1 | {a=100, b=18, c=42}
(1 row)

注意:要像这样添加两个 map ,您可以使用 map_zip_with .但是,要在对多行进行聚合时使用它,您可能需要将所有映射值聚合到单个 array 中并对其运行数组缩减。将所有 map 聚合到单个 array(map) 可能有效也可能无效,具体取决于这些数组的大小。

关于presto - 在 Presto 中添加两张 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642608/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com