UNION ALL 不能生成、插入数据至hive

hive on tez 的情况下。

做UNION ALL为三个不同的表与相同的DDL结构,但最终输出是生成零行。

查询数据可以查询数据,但是 insert  或者  create table 都没有数据。

CREATE  TABLE IF NOT EXISTS X STORED AS PARQUET AS 
      SELECT a,
             b,
             c
        FROM A
      UNION ALL
      SELECT a,
             b,
             c
        FROM B
      UNION ALL
      SELECT a,
             b,
             c
        FROM C;
或者
insert overwrite table  table_name
      SELECT a,
             b,
             c
        FROM A
      UNION ALL
      SELECT a,
             b,
             c
        FROM B
      UNION ALL
      SELECT a,
             b,
             c
        FROM C;

这样写么得数据。原因是hive  on  tez使用union all他为了加快速度,每个查询都分开查询存放在一个子目录里面。如果需要使用,就需要开启一些设置。

1、开启设置

set hive.mapred.supports.subdirectories=true; 
set mapred.input.dir.recursive=true;

2、或者,通过在末尾添加distribute by或order by(将运行较慢),运行UNION而不是UNION ALL,只要它没有子目录的表文件夹中创建文件即可。

CREATE  TABLE IF NOT EXISTS X STORED AS PARQUET AS 
select * from 
(
      SELECT a,
             b,
             c
        FROM A
      UNION ALL
      SELECT a,
             b,
             c
        FROM B
      UNION ALL
      SELECT a,
             b,
             c
        FROM C
      )s distribute by a;

你可能感兴趣的:(hive,hive,数据库,hadoop)