2016-09-27 77 views
0

我创建了一个存储有Avro文件格式的配置表。我想用下面猪装入同一蜂巢table命令猪 - 读取存储为Avro的Hive表

pig -useHCatalog; 
hive_avro = LOAD 'hive_avro_table' using org.apache.hive.hcatalog.pig.HCatLoader(); 

我收到“未能从hive_avro_table阅读”的错误,当我试图显示“hive_avro”使用DUMP命令。

请帮我解决这个问题。在此先感谢

回答

0
create table hivecomplex 
(name string, 
phones array<INT>, 
deductions map<string,float>, 
address struct<street:string,zip:INT> 
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY '$' 
MAP KEYS TERMINATED BY '#' 
STORED AS AVRO 
; 

hive> select * from hivecomplex; 
OK 
John [650,999,9999] {"pf":500.0} {"street":"pleasantville","zip":88888} 
Time taken: 0.078 seconds, Fetched: 1 row(s) 

Now for the pig 

pig -useHCatalog; 

a = LOAD 'hivecomplex' USING org.apache.hive.hcatalog.pig.HCatLoader(); 
dump a; 

ne.util.MapRedUtil - Total input paths to process : 1 
(John,{(650),(999),(9999)},[pf#500.0],(pleasantville,88888)) 
+0

感谢您的答复。你的例子正在工作。我在我的hive_avro表中使用了复杂的数据类型(Array,Map和Struct)。看起来像Struct数据类型导致了问题。有什么想法吗? –

+0

猪中支持复杂的数据类型。可以创建另一个关系使用LIMIT 5并转储该关系。 hive_avro_table是配置单元表还是视图?猪不支持视图。如果hive_avro_table是位置上的外部表检查权限,并且也是/ tmp –