HDP2.0 中的 Hive 列式加载器
Posted
技术标签:
【中文标题】HDP2.0 中的 Hive 列式加载器【英文标题】:Hive Columnar Loader in HDP2.0 【发布时间】:2013-10-31 13:03:58 【问题描述】:我正在使用 HDP 2.0 并运行一个简单的 Pig 脚本。
我已经注册了下面的 jar,然后我正在执行下面的代码(更新了架构)-
register /usr/lib/pig/piggybank.jar;
register /usr/lib/hive/lib/hive-common-0.11.0.2.0.5.0-67.jar;
register /usr/lib/hive/lib/hive-exec-0.11.0.2.0.5.0-67.jar;
A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING
org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age
int,create_dt string,timestamp string,accno int');
F = FILTER A BY (id == 85986249 );
STORE F INTO '/user/test/Pigout' USING PigStorage();
问题是,虽然 F 的值在 Hive 表中可用,但结果总是将 0 条记录写入输出。但它能够将所有记录加载到A中。
基本上过滤器功能不起作用。我的 Hive 表没有分区。我相信问题可能出在 HiveColumarLoade 但无法弄清楚它是什么。
如果您知道解决方案,请告诉我。我为此苦苦挣扎。
非常感谢您的帮助!!!
【问题讨论】:
您正在加载的表的完整架构是什么?请张贴。 嗨,我也发布了架构。谢谢! 【参考方案1】:基于pig 0.12 documentation HiveColumnarLoader 似乎需要中间关系才能过滤非分区值。鉴于 id 不是似乎是您的问题的分区。
试试这个:
A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING
org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age
int,create_dt string,timestamp string,accno int');
B = FOREACH GENERATE A.id, A.name, A.age, A.create_dt, A.timestamp, A.accno;
F = FILTER A BY (id == 85986249 );
STORE F INTO '/user/test/Pigout' USING PigStorage();
文档似乎都说,要处理实际值,您需要中间关系 B。
【讨论】:
以上是关于HDP2.0 中的 Hive 列式加载器的主要内容,如果未能解决你的问题,请参考以下文章