我一直在尝试用Pig来使用HBase类访问HBaseStorage。我正在用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 HBase调用的列名的java字符串使用标准的HBase库创建的。
这是预期的行为吗?所有的文档(包括O‘’Reilly的书)都没有暗示它是这样的。
猪版为0.13.0。HBase版本为0.94.10。
发布于 2014-08-11 13:41:51
您在第一个示例中不正确地指定了类型。如果使用通配符,则会将其映射到地图。如果指定单个列,则它将映射到标量数据类型。
https://stackoverflow.com/questions/25231346
复制相似问题