Czy ktoś wie jak skanować rekordy na podstawie jakiegoś skanowania I.E filtra .:skanowania z użyciem filtra HBase shell
column:something = "somevalue"
Coś podobnego this, ale z HBase zapłacić?
Czy ktoś wie jak skanować rekordy na podstawie jakiegoś skanowania I.E filtra .:skanowania z użyciem filtra HBase shell
column:something = "somevalue"
Coś podobnego this, ale z HBase zapłacić?
Spróbuj tego. To trochę brzydkie, ale działa dla mnie.
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'))
}
HBase powłoka będzie zawierać co masz w ~/.irbrc, dzięki czemu można umieścić coś takiego tam (nie jestem ekspertem Ruby, ulepszenia są mile widziane):
# 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
i wtedy można po prostu powiedzieć w powłoce:
scan_substr 't1', 'family', 'qualifier', 'somevalue', 'family:qualifier'
Użyj param filtr scan
, jak pokazano na pomoc użytkowania:
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}
scan 'test', {COLUMNS => ['F'],FILTER => \
"(SingleColumnValueFilter('F','u',=,'regexstring:http:.*pdf',true,true)) AND \
(SingleColumnValueFilter('F','s',=,'binary:2',true,true))"}
Więcej informacji można znaleźć here. Zwróć uwagę, że wiele przykładów znajduje się w załączonym pliku Filter Language.docx
.
Myślę, że ten parsujący język filtra działa tylko w późniejszych wersjach Hbase - w 0.90.6 (cdh 3u6) nie mogłem uzyskać żadnej odmiany tego działania. – Mikeb
Myślę, że bardzo przydatne jest spojrzenie na javadoc; oto javadoc dla 0.94: http://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html – mooreds
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);
Ten kod znajduje się w Javie, pytanie dotyczy powłoki HBase. – Tony
Jednym z filtra jest Valuefilter, które mogą być wykorzystywane do filtrowania wartości wszystkich kolumn.
hbase(main):067:0> scan 'dummytable', {FILTER => "ValueFilter(=,'binary:2016-01-26')"}
binarny jest jednym z komparatorami stosowanych w filtrze. Możesz użyć różnych komparatorów w filtrze na podstawie tego, co chcesz zrobić.
Możesz podać następujący adres URL: http: // www.hadooptpoint.com/filters-in-hbase-shell/. Zapewnia dobre przykłady użycia różnych filtrów w powłoce HBase.
Odpowiedzi dotyczące wyłącznie linków nie są dobrymi pytaniami. Opublikuj kod i wyjaśnij, aby pomóc. – KittMedia
To naprawdę jest bardzo brzydkie. Dzięki, nie mogłem znaleźć żadnych przykładów tego w książce HBs docs/book/oreilly. – mumrah