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óż.

 32
Author: Community, 2012-06-13

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)

 38
Author: stu s,
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:

 21
Author: Roman Nikitchenko,
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
 11
Author: 030,
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.

 5
Author: John Cooper,
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')" 
   } 
 1
Author: Rahul,
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 :)

 0
Author: khan,
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