我是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为它创建新文件。
我该怎么做?非常感谢您的帮助
答案 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脚本创建单独的文件。
我希望这会有所帮助。