我想将pig输出插入到Hive表中(Hive中的表已经使用确切的模式创建)。需要将输出值插入表中。我不想要通常的方法,其中我首先存储到一个文件,然后从Hive读取该文件,然后插入表格。我需要减少已完成的额外跳跃。
有可能吗?如果是这样,请告诉我如何做到这一点?
谢谢
答案 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