Pig - 读取存储为 Avro 的 Hive 表
Posted
技术标签:
【中文标题】Pig - 读取存储为 Avro 的 Hive 表【英文标题】:Pig - reading Hive table stored as Avro 【发布时间】:2016-09-27 06:29:49 【问题描述】:我创建了一个以 Avro 文件格式存储的配置单元表。我正在尝试使用以下 Pig 命令加载相同的配置单元表
pig -useHCatalog;
hive_avro = LOAD 'hive_avro_table' using org.apache.hive.hcatalog.pig.HCatLoader();
当我尝试使用 DUMP 命令显示“hive_avro”时,出现“未能从 hive_avro_table 读取”错误。
请帮我解决这个问题。提前致谢
【问题讨论】:
【参考方案1】: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))
【讨论】:
感谢您的回复。你的例子很有效。我在 hive_avro 表中使用了复杂的数据类型(Array、Map 和 Struct)。看起来 Struct 数据类型导致了这个问题。有什么想法吗? pig 支持复杂数据类型。可以使用 LIMIT 5 创建另一个关系并转储该关系。 hive_avro_table 是 hive 表还是视图? pig 不支持视图。如果 hive_avro_table 是外部表,则检查位置以及 /tmp 的权限以上是关于Pig - 读取存储为 Avro 的 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章
从 ES 加载数据并使用 pig 在 HDFS 中存储为 avro