首页 > 解决方案 > 雅典娜查询折叠稀疏矩阵/列数据

问题描述

假设我table1在 Amazon Athena 中有下表(技术上,在 Glue 中):

torg, foo, bar, x1, x2, x3, baz
-------------------------------
t1, 1, NULL,   NULL, NULL, NULL, goober
t2, 1, NULL,   NULL, NULL, NULL, NULL  -- want to ignore this row entirely, even though foo=1
t3, 1, tronic, NULL, NULL, NULL, NULL
...
t4, 2, NULL,   NULL, NULL, NULL, horse
t4, 2, zebra,  NULL, NULL, NULL, NULL
...

是否有一个 Athena 查询可以group by foo(在此示例中foo=1),但忽略NULL每一行的列值,这样结果看起来像?

foo, bar, baz
----------------
1, tronic, goober

对于上下文,我在不同时间将分区镶木地板写入 S3。使用 Athena 查询这些数据真是太棒了,但我很难想象 Athena 是否适合将这些列数据“折叠”成按特定列(或一组列)分组的更多“行”数据)。

虽然我可能会在 pandas 中进一步处理这些数据,并且可以在那里“折叠”它,但我希望 Athena 中可能存在查询模式。或者也许我在想这完全错误的......

任何见解都非常感谢。

标签: sparse-matrixparquetamazon-athena

解决方案


如果每组只有一个值,则可以使用max(或min) 和group by

WITH dataset(foo,bar, baz) AS (
   VALUES 
    (1,NULL,'tronic'),
    (1,'goober',NULL),
    (1,NULL, NULL)
 ) 
 
SELECT foo, max(bar) bar, max(baz) baz
FROM dataset
GROUP BY foo

输出:

酒吧 巴兹
1 古伯 电子

推荐阅读