使用PIG将数据写入HIVE外部表

时间:2016-12-29 18:09:20

标签: hive apache-pig

我想创建一个外部表并通过pig脚本将数据加载到其中。我遵循以下方法:

确定。在HDFS目录中的某处创建一个带有模式布局的外部配置单元表。让我们说

create external table emp_records(id int,
                              name String,
                              city String)
                              row formatted delimited 
                              fields terminated by '|'
                              location '/user/cloudera/outputfiles/usecase1';

只需创建一个如上所示的表,无需将任何文件加载到该目录中。

现在编写一个Pig脚本,我们读取某些输入目录的数据,然后在存储该Pig脚本的输出时使用如下

A =  LOAD 'inputfile.txt' USING PigStorage(',') AS(id:int,name:chararray,city:chararray);
B = FILTER A by id > = 678933;
C = FOREACH B GENERATE id,name,city;
STORE C INTO '/user/cloudera/outputfiles/usecase1' USING PigStorage('|');

确保Pigscript中最终FOREACH语句的目标位置和分隔符以及架构布局与Hive DDL架构匹配。

我的问题是,当我第一次创建表时,它正在hdfs中创建一个目录,当我尝试使用脚本存储文件时,它会抛出一个错误,说“文件夹已经存在”。看起来猪店总是写入一个只有特定名称的新目录?

有什么办法可以避免这个问题吗?

我们可以使用PIG中的STORE命令每次都写入特定的指令/文件吗?

由于 拉姆

1 个答案:

答案 0 :(得分:1)

是的,您可以使用HCatalog来获得结果。

记住你必须运行你的Pig脚本,如:

pig -useHCatalog your_pig_script.pig

或者如果您使用的是grunt shell,那么只需使用:

pig -useHCatalog

接下来是你的store命令将关系直接存储到hive表中使用:

STORE C INTO 'HIVE_DATABASE.EXTERNAL_TABLE_NAME' USING org.apache.hive.hcatalog.pig.HCatStorer();