hbase星门扫描仪-startrow和endrow不工作

mmvthczy  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(656)

我在尝试使用hbase stargate扫描表时遇到了一些主要问题。我的hbase行模式基本上是ObjectedNumber\u languagecode\u date\u 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

我想在表中扫描以ObjectdNumber开头的所有项。我认为问题是objectdnumbers是串行的,并且有不同的位数,但我不完全确定。
使用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" />

它把整张table上的每一行都还给了我。另一个行为是,4位startrow/endrow生成204 no content响应,但任何3位startrow/endrow都会返回整个表。
所有结果:

<Scanner startRow="999_" endRow="1000" />

204无内容:
我很困惑,为什么shell看起来工作得很好,而stargate xml却不是。

qybjjes1

qybjjes11#

我想是凌晨2点发的,但这真的很简单。我还没完全把脑子放在词典排序上。
自从99年以来,我原来的想法就行不通了。最后,我为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>");

以“99”为起点的外观:

<Scanner startRow="99_">
    <filter>
        {"type":"PrefixFilter","value":"OTlf"}
    </filter>
</Scanner>

相关问题