Scanner avec un filtre à L'aide de l'enveloppe de HBase

est-ce que quelqu'un sait scanner des enregistrements basés sur un filtre de balayage i.e.:

column:something = "somevalue"

quelque chose comme ce , mais de la coque de HBase?

43
demandé sur Community 2011-08-31 15:10:55

5 réponses

essayez ceci. C'est un peu moche, mais ça fonctionne pour moi.

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes
scan 't1', { COLUMNS => 'family:qualifier', FILTER =>
    SingleColumnValueFilter.new
        (Bytes.toBytes('family'),
         Bytes.toBytes('qualifier'),
         CompareFilter::CompareOp.valueOf('EQUAL'),
         SubstringComparator.new('somevalue'))
}

le shell HBase inclura tout ce que vous avez dans ~/.irbrc, donc vous pouvez mettre quelque chose comme ça là-dedans (Je ne suis pas un expert en rubis, les améliorations sont les bienvenues):

# imports like above
def scan_substr(table,family,qualifier,substr,*cols)
    scan table, { COLUMNS => cols, FILTER =>
        SingleColumnValueFilter.new
            (Bytes.toBytes(family), Bytes.toBytes(qualifier),
             CompareFilter::CompareOp.valueOf('EQUAL'),
             SubstringComparator.new(substr)) }
end

et puis vous pouvez juste dire dans le shell:

scan_substr 't1', 'family', 'qualifier', 'somevalue', 'family:qualifier'
47
répondu havanki4j 2011-10-25 21:19:11
scan 'test', {COLUMNS => ['F'],FILTER => \ 
"(SingleColumnValueFilter('F','u',=,'regexstring:http:.*pdf',true,true)) AND \
(SingleColumnValueFilter('F','s',=,'binary:2',true,true))"}

Plus d'informations peuvent être trouvées ici . Notez que plusieurs exemples se trouvent dans le fichier Filter Language.docx ci-joint.

29
répondu dape 2015-09-28 13:04:17

utilisez le filtre param de scan , comme indiqué dans l'aide d'utilisation:

hbase(main):002:0> scan

ERROR: wrong number of arguments (0 for 1)

Here is some help for this command:
Scan a table; pass table name and optionally a dictionary of scanner
specifications.  Scanner specifications may include one or more of:
TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,
or COLUMNS. If no columns are specified, all columns will be scanned.
To scan all members of a column family, leave the qualifier empty as in
'col_family:'.

Some examples:

  hbase> scan '.META.'
  hbase> scan '.META.', {COLUMNS => 'info:regioninfo'}
  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
  hbase> scan 't1', {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
  hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}

For experts, there is an additional option -- CACHE_BLOCKS -- which
switches block caching for the scanner on (true) or off (false).  By
default it is enabled.  Examples:

  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false}
8
répondu Tony 2011-12-22 23:09:33
Scan scan = new Scan();
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);

//in case you have multiple SingleColumnValueFilters, 
you would want the row to pass MUST_PASS_ALL conditions
or MUST_PASS_ONE condition.

SingleColumnValueFilter filter_by_name = new SingleColumnValueFilter( 
                   Bytes.toBytes("SOME COLUMN FAMILY" ),
                   Bytes.toBytes("SOME COLUMN NAME"),
                   CompareOp.EQUAL,
                   Bytes.toBytes("SOME VALUE"));

filter_by_name.setFilterIfMissing(true);  
//if you don't want the rows that have the column missing.
Remember that adding the column filter doesn't mean that the 
rows that don't have the column will not be put into the 
result set. They will be, if you don't include this statement. 

list.addFilter(filter_by_name);


scan.setFilter(list);
6
répondu KannarKK 2014-02-18 07:03:53

L'un des filtres est Valuefilter qui peut être utilisé pour filtrer toutes les valeurs de la colonne.

hbase(main):067:0> scan 'dummytable', {FILTER => "ValueFilter(=,'binary:2016-01-26')"}

binaire est l'un des comparateurs utilisés dans le filtre. Vous pouvez utiliser différents comparateurs dans le filtre basé sur ce que vous voulez faire.

vous pouvez vous référer à l'url suivante: http:// www.hadooptpoint.com/filters-in-hbase-shell/. Il fournit de bons exemples sur la façon d'utiliser différents filtres dans L'enveloppe de HBase.

4
répondu Chetan Somani 2016-02-22 17:04:32