HBase (Easy): How to Perform Range Prefix Scan in hbase shell

84,310

Solution 1

So it turns out to be very easy. The scan ranges are not inclusive, the logic is start <= key < end. So the answer is

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}

Solution 2

In recent versions of HBase you can now do in the hbase shell:

scan 'mytable', {ROWPREFIXFILTER => 'abc'}

This effectively does this (and also works for binary situations)

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}

This method is a LOT more efficient than the "PrefixFilter" approach because the latter puts all records through the comparison code the is present in this PrefixFilter class.

Solution 3

The accepted solution won't work in all cases (binary keys). In addition, using a PrefixFilter can be slow because it performs a table scan until it reaches the prefix. A more performant solution is to use a STARTROW and a FILTER like so:

 scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}

Solution 4

I think what you need is a filter

checkout the answer for following question Scan with filter using HBase shell

more filters are listed in http://hbase.apache.org/book/client.filter.html

Share:
84,310
David Williams
Author by

David Williams

Updated on January 29, 2020

Comments

  • David Williams
    David Williams over 4 years

    I am designing an app to run on hbase and want to interactively explore the contents of my cluster. I am in the hbase shell and I want to perform a scan of all keys starting with the chars "abc". Such keys might inlcude "abc4", "abc92", "abc20014" etc... I tried a scan

    hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}
    

    But this does not seem to return anything since there is technically no rowkey "abc" only rowkeys starting with "abc"

    What I want is something like

    hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}
    

    I hear HBase can do this quickly and is one of its main selling points. How do I do this in the hbase shell?