我在尝试使用HBase Stargate扫描表时遇到了一些重大问题。我的HBase行模式基本上是objectidnumber_languagecode_date_randomhash,即。
1_en_2014-12-12_1432ae341
1_en_2014-13-13_234fe321
2_en_2014-01-14_243a43fe
...
342342_uk_2014-01-14_2234af3
我想扫描表格,查找以objectidnumber开头的所有项目。我认为问题是objectidnumbers是连续的并且有不同的位数,但我不完全确定。
使用HBase shell时,我使用的命令是:
scan 'object_articles', { STARTROW => '33_', ENDROW => '34' }
这应该给我以33_开头的每一行,并在它到达34时立即停止,结果表明:
hbase(main):012:0> scan 'object_articles', { STARTROW => '33_', ENDROW => '34' }
ROW COLUMN+CELL
33_en_2004_zdfasdf column=cf:articleId, timestamp=1398803544834, value=en_2004_zdfasdf
33_en_2004_zdfasdf column=cf:articleTitle, timestamp=1398803544834, value=Testing
33_en_2004_zdfasdf column=cf:index, timestamp=1398803544834, value=en_2004
1 row(s) in 0.0120 seconds
然而,当我使用这个简单的XML设置我的Stargate扫描仪时:
<Scanner startRow="33_" endRow="34" />
它让我回到整个表格的每一行。另一个行为是4位数的startRow / endRow产生204 No Content响应,但任何3位数的startRow / endRow都会带回整个表。
所有结果:
<Scanner startRow="999_" endRow="1000" />
204没有内容:
我很困惑为什么看起来Shell工作正常,但Stargate XML不是。
答案 0 :(得分:0)
我想它是在凌晨2点发布的,但这很简单。我并没有完全围绕词典排序。
自99_&lt; 9_,我原来的想法没有开始工作。我最终为startRow添加了一个PrefixFilter并删除了endRow,这样它只是从OOID开始抓取行:
在Java中:
xml.append("<Scanner startRow=\"").append(startRow).append("\">");
// Prefix Filter
PrefixFilter test = new PrefixFilter(Bytes.toBytes(startRow));
xml.append("<filter>").append(ScannerModel.stringifyFilter(test)).append("</filter>");
xml.append("</Scanner>");
&#34; 99 _&#34;作为startRow:
<Scanner startRow="99_">
<filter>
{"type":"PrefixFilter","value":"OTlf"}
</filter>
</Scanner>