在 aws athena 中聚合项目 sql
Aggregating items in aws athena sql
给定一个如下所示的数据库:
item
vietnamese
cost
unique_id
fruits
trai cay
10
abc123
fruits
trai cay
8
foo99
fruits
trai cay
9
foo99
fruits
trai cay
12
abc123
fruits
trai cay
14
abc123
vege
rau
3
rr1239
vege
rau
3
rr1239
通过 AWS Athena 查询时:
SELECT item,
sum(cost) as sum_cost,
avg(cost) as avg_cost,
array_agg(vietnamese) as vietnamese,
array_agg(cost) as costs,
array_agg(unique_id) as unique_ids
FROM foodtable
GROUP BY item
ORDER BY avg_cost
我会得到一组重复的越南语翻译:
item
vietnamese
fruits
[trai cay, trai cay, trai cay, trai cay, trai cay]
有没有办法只保留 vietnamese
列中的 last/first 值?
此外,对于上面的查询,unique_ids
值将如下所示:
item
unique_ids
fruits
[abc123, foo99, foo99, abc123, abc123]
有没有办法聚合计数并保留一个计数器列来实现?
item
unique_ids
fruits
[abc123:3, foo99:2]
目前,我已经尝试通过 set(vietnamese)
和 collections.Counter(unique_ids)
的唯一性从 SQL 查询中获取结果后读取输出。但是,如果可以在 SQL 查询中执行此操作,那就更可取了。
Athena有很多操作数组的函数,比如filter
, element_at
, cardinality
, reduce
, as well as functions that create and process maps。您可以使用这些来处理聚合数组。
例如,要计算每个唯一 ID 的出现次数,您可以这样做:
SELECT
item,
transform_values(multimap_agg(unique_id, 1), (k, v) -> cardinality(v))
GROUP BY item
给定一个如下所示的数据库:
item | vietnamese | cost | unique_id |
---|---|---|---|
fruits | trai cay | 10 | abc123 |
fruits | trai cay | 8 | foo99 |
fruits | trai cay | 9 | foo99 |
fruits | trai cay | 12 | abc123 |
fruits | trai cay | 14 | abc123 |
vege | rau | 3 | rr1239 |
vege | rau | 3 | rr1239 |
通过 AWS Athena 查询时:
SELECT item,
sum(cost) as sum_cost,
avg(cost) as avg_cost,
array_agg(vietnamese) as vietnamese,
array_agg(cost) as costs,
array_agg(unique_id) as unique_ids
FROM foodtable
GROUP BY item
ORDER BY avg_cost
我会得到一组重复的越南语翻译:
item | vietnamese |
---|---|
fruits | [trai cay, trai cay, trai cay, trai cay, trai cay] |
有没有办法只保留 vietnamese
列中的 last/first 值?
此外,对于上面的查询,unique_ids
值将如下所示:
item | unique_ids |
---|---|
fruits | [abc123, foo99, foo99, abc123, abc123] |
有没有办法聚合计数并保留一个计数器列来实现?
item | unique_ids |
---|---|
fruits | [abc123:3, foo99:2] |
目前,我已经尝试通过 set(vietnamese)
和 collections.Counter(unique_ids)
的唯一性从 SQL 查询中获取结果后读取输出。但是,如果可以在 SQL 查询中执行此操作,那就更可取了。
Athena有很多操作数组的函数,比如filter
, element_at
, cardinality
, reduce
, as well as functions that create and process maps。您可以使用这些来处理聚合数组。
例如,要计算每个唯一 ID 的出现次数,您可以这样做:
SELECT
item,
transform_values(multimap_agg(unique_id, 1), (k, v) -> cardinality(v))
GROUP BY item