我想创建一个外部表并通过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命令每次都写入特定的指令/文件吗?
由于 拉姆
答案 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();