我一直在试验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。
答案 0 :(得分:0)
您在第一个示例中未正确指定类型。如果使用通配符,它将映射到地图。如果指定单个列,则它将映射到标量数据类型。