Skanowanie wierszy HTable dla określonej wartości kolumny za pomocą powłoki HBase
Chcę skanować wiersze w HTable z HBase shell gdzie rodzina kolumn (np. Tweet) ma określoną wartość (np. user_id).
Teraz chcę znaleźć wszystkie wiersze, w których tweet: user_id ma wartość test1
tak jak ta kolumna ma wartość 'test1'
column=tweet:user_id, timestamp=1339581201187, value=test1
Chociaż mogę zeskanować tabelę pod kątem konkretnego użycia,
scan 'tweetsTable',{COLUMNS => 'tweet:user_id'}
Ale nie znalazłem sposobu, aby przeskanować wiersz w poszukiwaniu wartości.
Czy można to zrobić za pomocą powłoki HBase?
Sprawdziłam to pytanie jako cóż.
6 answers
Jest to możliwe bez Ula:
scan 'filemetadata',
{ COLUMNS => 'colFam:colQualifier',
LIMIT => 10,
FILTER => "ValueFilter( =, 'binaryprefix:<someValue.e.g. test1 AsDefinedInQuestion>' )"
}
Uwaga: aby znaleźć wszystkie wiersze zawierające test1 jako wartość określoną w pytaniu, użyj binaryprefix: test1 w filtrze (zobacz ta odpowiedź aby uzyskać więcej przykładów)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-15 11:36:32
Nishu, oto rozwiązanie, z którego okresowo korzystam. W rzeczywistości jest o wiele potężniejszy, niż potrzebujesz teraz, ale myślę, że kiedyś użyjesz jego mocy. Tak, to jest dla powłoki HBase.
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 'yourTable', {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('field'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('AAA')), COLUMNS => 'family:field' }
Zwracana jest tylko kolumna family:field
z zastosowanym filtrem. Filtr ten można ulepszyć, aby wykonywać bardziej skomplikowane porównania.
Oto również wskazówki dla Ciebie, które uważam za najbardziej przydatne:
- http://hadoop-hbase.blogspot.com/2012/01/hbase-intra-row-scanning.html - Wyjaśnienie skanowania wewnątrz wiersza (Java API).
- https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/filter/FilterBase.html - JavaDoc dla klasy FilterBase z linkami do potomków, które w rzeczywistości mogą być używane w tym samym stylu. Ok, składnia powłoki będzie nieco inna, ale mając przykład powyżej możesz tego użyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-05 12:07:06
Ponieważ było wiele próśb o wyjaśnienie ta odpowiedź ta dodatkowa odpowiedź została opublikowana.
Przykład 1
If
scan '<table>', { COLUMNS => '<column>', LIMIT => 3 }
Wróci:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
Następnie ten filtr:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( =, 'binaryprefix:hello_value2') AND ValueFilter( =, 'binaryprefix:hello_value3')" }
Wróci:
ROW COLUMN+CELL
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
Przykład 2
If not is supported as well:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( !=, 'binaryprefix:hello_value2' )" }
Wróci:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:20
Przykład tekstowego wyszukiwania wartości BIGBLUE w tabeli t1 z rodziną kolumn d: a_content. Skanowanie tabeli pokaże wszystkie dostępne wartości: -
scan 't1'
...
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
...
Aby wyszukać tylko wartość BIGBLUE z limitem 1, spróbuj wykonać poniższe polecenie:-
scan 't1',{ COLUMNS => 'd:a_content', LIMIT => 1, FILTER => "ValueFilter( =, 'regexstring:BIGBLUE' )" }
COLUMN+CELL
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
Oczywiście usunięcie limitu spowoduje wyświetlenie wszystkich wystąpień w tej tabeli / por.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 11:18:24
Aby przeskanować tabelę w hbase na podstawie dowolnej wartości kolumny, SingleColumnValueFilter może być użyty jako:
scan 'tablename' ,
{
FILTER => "SingleColumnValueFilter('column_family','col_name',>, 'binary:1')"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-15 11:38:31
Z HBase shell myślę, że nie jest to możliwe, ponieważ jest to trochę jak zapytanie, z którego używamy, aby znaleźć dane spsecific. Jak wiadomo HBase to noSQL więc gdy chcemy zastosować query lub jeśli mamy taki przypadek jak ty to myślę że należy użyć Hive lub PIG gdzie jako Hive jest ciche dobre podejście bo w PIG musimy zadzierać ze skryptami.
W każdym razie można uzyskać dobre guaidence o Ulu stąd integracja ula z HBase i z Tutaj
If yout only purpose jest, aby zobaczyć dane nie dostać z kodu (dowolnego klienta) następnie można użyć HBase Explorer lub nowy i bardzo dobry produkt, ale to jest w wersji beta jest "HBase manager". Możesz to pobrać z HBase Manager
Jego prosty, a co ważniejsze, pomaga wstawiać i usuwać dane, stosując filtry na kwalifikatorach kolumn z interfejsu użytkownika, podobnie jak inne Dbclienty. Spróbuj.
Mam nadzieję, że będzie to pomocne dla ciebie :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 12:38:14