【发布时间】:2017-02-01 04:02:43
【问题描述】:
我有一个包含用户和每周活动的表格,例如这是user_activity 表格:
userid | wk1 | wk2 | wk3
u1 | 1 | 0 | 1
u2 | 0 | 1 | 0
u3 | 1 | 0 | 1
我想把它改成:
week | active
wk1 | 2
wk2 | 1
wk3 | 2
我可以像这样使用 UNION ALL 来实现这一点:
SELECT 'wk1' as week,
SUM( wk1 ) AS active
FROM user_activity
UNION ALL
SELECT 'wk2' as week,
SUM( wk2 ) AS active
FROM user_activity
UNION ALL
SELECT 'wk3' as week,
SUM( wk3 ) AS active
FROM user_activity;
有没有办法在不使用 UNION ALL 的情况下达到同样的效果?
谢谢!
编辑: Impala 版本:2.6.0
没有 UNION ALL 的原因:对于每个 SELECT,将从 HDFS 扫描整个表。如果我有一个巨大的表,这将导致 OOM 错误。
【问题讨论】:
-
为什么没有 UNION ALL?
-
除非您有一个表,其中的值“wk1”、“wk2”和“wk3”在不同的行中,否则您需要构造这样的表。
UNION ALL似乎是最有可能的方法。 -
Impala 版本?