HIVE UNION

  • 语法
select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...
  • 说明
    HIVE 1.2.0版本之前仅支持: UNION ALL (bag union)
    1.2.0版本之后:UNION的默认结果是去重后的结果

  • UNION within a FROM Clause:

/* 例子1 */
SELECT *
FROM (
  select_statement
  UNION ALL
  select_statement
) unionResult;

/* 例子2 */
SELECT u.id, actions.date
FROM (
    SELECT av.uid AS uid
    FROM action_video av
    WHERE av.date = '2008-06-03'
    UNION ALL
    SELECT ac.uid AS uid
    FROM action_comment ac
    WHERE ac.date = '2008-06-03'
 ) actions JOIN users u ON (u.id = actions.uid);
  • 使用 ORDER BY, SORT BY, CLUSTER BY, DISTRIBUTE BY or LIMIT:
/* 例子1、修饰单个SELECT */
SELECT key FROM (SELECT key FROM src ORDER BY key LIMIT 10)subq1
UNION
SELECT key FROM (SELECT key FROM src1 ORDER BY key LIMIT 10)subq2;

/* 例子2、修饰整个UNION结果 */
SELECT key FROM src
UNION
SELECT key FROM src1 
ORDER BY key LIMIT 10;

/* 例子3、错误用法(×):以下用法是错的 */
INSERT OVERWRITE TABLE target_table
    SELECT name, id, category FROM source_table_1
    UNION ALL
    SELECT name, id, "Category159" FROM source_table_2;

/* 例子4、正确用法 */
INSERT OVERWRITE TABLE target_table
  SELECT name, id, category FROM source_table_1
  UNION ALL
  SELECT name, id, "Category159" as category FROM source_table_2;
  • 列的值类型转换:
    (在HIVE-2.2.0版本之前,HIVE尽量试图执行类型转换,但是之后只在类型组内转换,即string group\ number group \ date group三个组内默认转换,跨组转换需要显示进行)
SELECT name, id, cast('2001-01-01' as date) d FROM source_table_1
UNION ALL
SELECT name, id, hiredate as d FROM source_table_2;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值