使用Pig通过HBaseStorage访问HBASE

时间:2014-08-10 17:43:15

标签: java hadoop hbase apache-pig

我一直在试验Pig以使用HBaseStorage类访问HBase。我发现HBaseStorage用来匹配列的方法有奇怪的行为。请考虑以下示例:

test = load 'hbase://resultstable' using org.apache.pig.backend.hadoop.hbase.HBaseStorage('foo:fail','-loadKey false') as (testresults:map[]);

可以肯定列家族'foo'和列名'fail'存在,并且该列中存在记录。查询不返回任何记录。但是,以下查询返回记录:

test = load 'hbase://resultstable' using org.apache.pig.backend.hadoop.hbase.HBaseStorage('foo:fail*','-loadKey false') as (testresults:map[]);

请注意两个示例之间的区别,因为后者使用'foo:fail *'作为参数。 我的猜测是,在列名中存储了一个空终止符,并且二进制完全匹配比较失败,因为在第一个示例中,没有显式传递空终止符(在我看来不应该这样)。

列'foo:fail'是使用标准HBase库通过java字符串创建的,该字符串包含传递给相应HBase java API调用的列名。

这是预期的行为吗?所有文档(包括O'Reilly的书)都没有暗示它是。

猪版本为0.13.0。 HBase版本为0.94.10。

1 个答案:

答案 0 :(得分:0)

您在第一个示例中未正确指定类型。如果使用通配符,它​​将映射到地图。如果指定单个列,则它将映射到标量数据类型。