使用 PIG 将数据写入 HIVE 外部表
Posted
技术标签:
【中文标题】使用 PIG 将数据写入 HIVE 外部表【英文标题】:Writing data using PIG to HIVE external table 【发布时间】:2016-12-29 18:09:20 【问题描述】:我想创建一个外部表并通过 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】:是的,您可以使用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();
【讨论】:
以上是关于使用 PIG 将数据写入 HIVE 外部表的主要内容,如果未能解决你的问题,请参考以下文章