如何从HIVE中的一个选择中导出多个文件

时间:2017-05-25 21:48:15

标签: hadoop hive

我是HIVE和Hadoop的初学者。我在这样的hive表中加载了一个文件:

 YEAR;DEP;CAP

 2012;1;6774

 2013;1;7082

 2014;1;6377

 2015;1;7319

 2005;94;7893

 2006;94;8620

 2007;94;8144

我想在输出中有n个平面文件,按DEP分组 命名datafile_DEP:

  

第一个文件

 2012;1;6774

 2013;1;7082

 2014;1;6377

 2015;1;7319
  

第二个文件

 2005;94;7893

 2006;94;8620

 2007;94;8144

等等。每次我有一个新的DEP为它创建新文件。

我该怎么做?非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

Hive没有开箱即用来创建具有已定义文件名的文件。

使用hive动态分区可以解决一半问题,请阅读here。创建另一个在DEP列上分区的表,然后加载数据。

--Actual table
create table source (year int, cap int, dep int) ...

--Partitioned table
create table dep_partitioned (year int, cap int) PARTITIONED BY ( dep int) ....
--Enable dynamic partition 

SET hive.exec.dynamic.partition.mode=non-strict

INSERT OVERWRITE TABLE dep_partitioned PARTITION (dep)
SELECT year, cap, dep FROM source;

由于Hive分区存储在HDFS目录上的数据,并且每个分区列值符合单独的HDFS路径。每个DEP值在dep_partitioned表位置上都有单独的目录,然后每个DEP目录使用bash脚本创建单独的文件。

我希望这会有所帮助。