Подтвердить что ты не робот

Сканирование строк HTable для определенного значения столбца с использованием оболочки HBase

Я хочу сканировать строки в HTable из hbase shell, где семейство столбцов (т.е. Tweet) имеет определенное значение (то есть user_id).

Теперь я хочу найти все строки, где твит: user_id имеет значение test1, так как этот столбец имеет значение 'test1'

column=tweet:user_id, timestamp=1339581201187, value=test1

Хотя я могу сканировать таблицу для конкретного использования,

scan 'tweetsTable',{COLUMNS => 'tweet:user_id'}

но я не нашел способа сканировать строку для значения.

Возможно ли это сделать через оболочку HBase?

Я проверил этот вопрос.

4b9b3361

Ответ 1

Это возможно без улья:

scan 'filemetadata', { COLUMNS => 'colFam:colQualifier', LIMIT => 10, FILTER => "ValueFilter( =, 'binaryprefix:<someValue.e.g. test1 AsDefinedInQuestion>' )" }

Примечание. Чтобы найти все строки, содержащие test1 как значение, указанное в вопросе, используйте binaryprefix: test1 в фильтре (см. этот ответ для получения дополнительных примеров)

Ответ 2

Nishu, вот решение, которое я периодически использую. Это на самом деле гораздо мощнее, чем вам нужно сейчас, но я думаю, что вы когда-нибудь будете использовать его. Да, это для оболочки 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' }

Возвращается только столбец family:field с примененным фильтром. Этот фильтр можно улучшить для выполнения более сложных сравнений.

Вот вам и подсказки, которые я считаю наиболее полезными:

Ответ 3

Как было несколько запросов для объяснения этого ответа, этот дополнительный ответ был отправлен.

Пример 1

Если

scan '<table>', { COLUMNS => '<column>', LIMIT => 3 }

вернется:

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

то этот фильтр:

scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( =, 'binaryprefix:hello_value2') AND ValueFilter( =, 'binaryprefix:hello_value3')" }

вернется:

ROW     COLUMN+CELL
ROW2    column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3    column=<column>, timestamp=<timestamp>, value=hello_value3

Пример 2

Если также не поддерживается:

scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( !=, 'binaryprefix:hello_value2' )" }

вернется:

ROW     COLUMN+CELL
ROW1    column=<column>, timestamp=<timestamp>, value=hello_value
ROW3    column=<column>, timestamp=<timestamp>, value=hello_value3

Ответ 4

Пример текстового поиска значения BIGBLUE в таблице t1 с семейством столбцов d: a_content. При сканировании таблицы будут показаны все доступные значения: -

scan 't1'
...
column=d:content, timestamp=1404399246216, value=BIGBLUE
...

Чтобы выполнить поиск только для значения BIGBLUE с ограничением 1: -

scan 't1',{ COLUMNS => 'd:a_content', LIMIT => 1, FILTER => "ValueFilter( =, 'regexstring:BIGBLUE' )" }

COLUMN+CELL
column=d:a_content, timestamp=1404399246216, value=BIGBLUE

Очевидно, что удаление предела покажет все вхождения в этой таблице/cf.

Ответ 5

Для сканирования таблицы в hbase на основе любого значения столбца SingleColumnValueFilter может использоваться как:

scan 'tablename' ,{ FILTER => "SingleColumnValueFilter('column_family','col_name',>, 'binary:1')" } 

Ответ 6

Из оболочки HBAse я думаю, что это невозможно, потому что это как-то вроде того, как запрос, из которого мы используем, хочет найти spsecific-данные. Поскольку все мы знаем, что HBAse - это noSQL, поэтому, когда мы хотим применить запрос, или если у нас есть такой случай, как вы, тогда я думаю, вы должны использовать Hive или PIG, где, поскольку Hive является тихим хорошим подходом, потому что в PIG нам нужно возиться со сценариями. < бр /" > В любом случае, вы можете получить хорошее представление об улье отсюда интеграция с HIVE с HBase и Здесь
Если у вас есть только цель - просмотреть данные, которые нельзя получить из кода (любого клиента), то вы можете использовать HBase Explorer или новый и очень хороший продукт, но в его бета-версии находится "HBase manager". Вы можете получить это из HBase Manager
Его простая и, что более важно, помогает вставлять и удалять данные, применяя фильтры для классификаторов столбцов из UI, как и другие DBclients. Попробуй.
Надеюсь, это будет полезно для вас.