假设我有两个包含以下数据的表:
A1
| c1 | c2 |
| a | b |
A2
| c1 | c2 |
| c | d |
我想运行一个选择返回两个表的数据,A1数据高于A2数据:
A1 U A2
| c1 | c2 |
| a | b |
| c | d |
所以在Hive上我可以做类似的事情:
SELECT * FROM A1
UNION ALL
SELECT * FROM A2
但这并不能产生正确的结果。我怎么能强制执行UNION ALL的命令?或者是产生这种输出的另一种解决方案?
答案 0 :(得分:3)
你的工作流程是否会使你的hive输出中有一个额外的列?如果没有,您可以使用:
select sort_char, c1, c2 from (
select '1' as sort_char, c1, c2 from A1
union
select '2' as sort_char, c1, c2 from A2
) A3 sort by sort_char
答案 1 :(得分:1)
嘿Jason你的解决方案也适用于我的查询..我尝试做同样的事情..在这里我在你的查询中添加了UNION ALL ..它对我有用..感谢你添加一个列的想法到桌子。
选择sort_char,c1,c2(选择' 1'作为sort_char,c1,c2来自tbl1 union all select' 2' as sort_char,c1,c2 from tbl2 )a;
如果不添加新字段,下面的查询也适用于我..
选择c1,c2(选择c1,c2来自tbl1 union all select c1,c2来自tbl2)tbl3;
答案 2 :(得分:0)
没有任何顺序给出任意结果,它每次都不能保证相同的结果。我建议通过sort_char子句附加顺序,以便每次都获得相同的结果。
<强>查询:强> 选择sort_char,c1,c2(选择&#39; 1&#39;作为sort_char,c1,c2来自tbl1 union all select&#39; 2&#39; as sort_char,c1,c2 from tbl2)order by sort_char;