Hive 使用PIG将数据写入配置单元外部表

Hive 使用PIG将数据写入配置单元外部表,hive,apache-pig,Hive,Apache Pig,我想创建一个外部表,并通过pig脚本将数据加载到其中。我采取了以下方法: 嗯。在HDFS目录中的某个位置创建具有架构布局的外部配置单元表。比方说 create external table emp_records(id int, name String, city String) row formatted deli

我想创建一个外部表,并通过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语句的目标位置、分隔符和模式布局与配置单元DDL模式匹配


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

有没有办法避免这个问题

在PIG中,是否还有其他属性可以与STORE命令一起使用,以便每次写入特定的目录/文件

谢谢 Ram

是的,您可以使用来实现您的结果

请记住,您必须运行Pig脚本,如下所示:

pig -useHCatalog your_pig_script.pig
或者,如果您使用的是grunt shell,则只需使用:

pig -useHCatalog
接下来是将关系直接存储到配置单元表中的store命令使用:

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