如何在AWS Athena中从数据表生成二进制矩阵?
在AWS Athena中生成二进制矩阵的实现方法
可以在AWS Athena中通过SQL的条件聚合(行转列)操作实现这种二进制矩阵转换,以下是具体方案:
原始数据表
| name | product |
|---|---|
| John | Bike |
| John | Shirt |
| John | Ball |
| Blake | Shirt |
| Mike | Ball |
| Mike | Hat |
目标二进制矩阵
| name | Bike | Shirt | Ball | Hat |
|---|---|---|---|---|
| John | 1 | 1 | 1 | 0 |
| Blake | 0 | 1 | 0 | 0 |
| Mike | 0 | 0 | 1 | 1 |
实现SQL语句
SELECT name, MAX(CASE WHEN product = 'Bike' THEN 1 ELSE 0 END) AS Bike, MAX(CASE WHEN product = 'Shirt' THEN 1 ELSE 0 END) AS Shirt, MAX(CASE WHEN product = 'Ball' THEN 1 ELSE 0 END) AS Ball, MAX(CASE WHEN product = 'Hat' THEN 1 ELSE 0 END) AS Hat FROM your_table_name -- 替换为你的实际表名 GROUP BY name ORDER BY name;
逻辑说明
- 利用
CASE WHEN对每个产品进行判断:如果用户拥有该产品则返回1,否则返回0 - 通过
MAX聚合函数配合GROUP BY name,将每个用户的多条记录合并为一行,得到对应的二进制标记 - 若产品列表是动态变化的,Athena本身不支持直接生成动态列,可先查询所有唯一产品:
再根据查询结果拼接生成完整的SQL语句执行。SELECT DISTINCT product FROM your_table_name;
内容的提问来源于stack exchange,提问作者Momchil Vasilev
相关产品推荐
相关产品推荐

