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 表的主要内容,如果未能解决你的问题,请参考以下文章

将 avro 转换为镶木地板(也许使用 hive?)

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

从 HIVE 表加载到 HDFS 作为 AVRO 文件

从 ES 加载数据并使用 pig 在 HDFS 中存储为 avro

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

pig-avro:如何自定义方式,他们 avro 存储加载文件