0

我正在使用 HDP 2.0 并运行一个简单的 Pig 脚本。

我已经注册了下面的罐子,然后我正在执行下面的代码(更新了架构) -

 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 中,但无法弄清楚它是什么。

如果您知道解决方案,请告诉我。我为此苦苦挣扎。

非常感谢您的帮助!!!

4

1 回答 1

0

根据pig 0.12 文档,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。

于 2013-11-01T15:09:44.243 回答