在单个实例中将pig输出存储到Hive表中

时间:2015-07-08 09:30:33

标签: hadoop hive apache-pig

我想将pig输出插入到Hive表中(Hive中的表已经使用确切的模式创建)。需要将输出值插入表中。我不想要通常的方法,其中我首先存储到一个文件,然后从Hive读取该文件,然后插入表格。我需要减少已完成的额外跳跃。

有可能吗?如果是这样,请告诉我如何做到这一点?

谢谢

4 个答案:

答案 0 :(得分:6)

确定。在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架构匹配。

答案 1 :(得分:3)

下面介绍了两种方法,其中“Employee”表示例将pig输出存储到hive表中。 (先决条件是应该已经创建了配置表)

A =  LOAD 'EMPLOYEE.txt' USING PigStorage(',') AS(EMP_NUM:int,EMP_NAME:chararray,EMP_PHONE:int);

方法1:使用Hcatalog

// dump pig result to Hive using Hcatalog 
store A into 'Empdb.employee' using org.apache.hive.hcatalog.pig.HCatStorer();

(或)

方法2:使用HDFS物理位置

// dump pig result to external hive warehouse location
STORE A INTO 'hdfs://<<nmhost>>:<<port>>/user/hive/warehouse/Empdb/employee/' USING PigStorage(',')

答案 2 :(得分:0)

您可以使用Hcatalog存储它

使用org.apache.hive.hcatalog.pig.HCatStorer()将其存储到“表名”中

请参阅以下链接 https://acadgild.com/blog/loading-and-storing-hive-data-into-pig

答案 3 :(得分:0)

最好的方法是使用 HCatalog 并将数据写入配置单元表。

使用org.apache.hive.hcatalog.pig.HCatStorer();将final_data存储到“ Hive_table_name”中;

但是在存储数据之前,请确保“ final_data”数据集中的列与表的模式完全匹配并映射。

然后像这样运行您的Pig脚本: pig script.pig -useHCatalog