Как получить несколько версий из одной конкретной строки и столбца в HBase - PullRequest
9 голосов
/ 11 декабря 2011

Как мы знаем, в hbase есть особенность, заключающаяся в том, что конкретная строка и конкретный столбец могут записывать недавние значения изменений по временным меткам. Итак, мой вопрос: КАК перечислить все измененные значения, используя любую команду HBase? Я много гуглил, но не нашел полезных ссылок.

Ответы [ 3 ]

14 голосов
/ 23 сентября 2015

Управление версиями не включено по умолчанию. Таким образом, вы должны указать это при создании таблицы.

create 'student',{NAME=>"personal",Versions=>5},'school'

Здесь управление версиями включено для столбца «личный», но не для столбца «школа»

Это можно увидеть, если описать таблицу

hbase(main):009:0> describe 'student'
Table student is ENABLED
student
COLUMN FAMILIES DESCRIPTION
{NAME => 'personal', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
{NAME => 'school', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

Для personal показывает VERSIONS => '5' Для school показывает VERSIONS => '1'.

Если таблица уже создана, ее можно изменить

alter 'student',NAME=>'school',VERSIONS =>3

hbase(main):011:0> describe 'student'
Table student is ENABLED
student
COLUMN FAMILIES DESCRIPTION
{NAME => 'personal', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
{NAME => 'school', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

Не показывает VERSIONS => '3' Для school, как ожидалось.

Положить данные в таблицу. Введите несколько раз в одной ячейке. А затем отсканируйте таблицу.

put 'student','1','personal:name','kaushik'
put 'student','1','personal:name','kaushik_again'
put 'student','1','school:name','great_school'
put 'student','1','school:name','great_school_again'

scan 'student',{VERSIONS=>10}
ROW  COLUMN+CELL
 1   column=personal:name, timestamp=1443002303208, value=kaushik_again
 1   column=personal:name, timestamp=1443002294049, value=kaushik
 1   column=school:name, timestamp=1443002320753, value=great_school_again
 1   column=school:name, timestamp=1443002311421, value=great_school 

Как и ожидалось, он показывает как старое, так и новое значение.

10 голосов
/ 29 апреля 2013

То же самое можно сделать в оболочке hbase, используя:

get 'tablename', 'rowid', {COLUMN => 'cf:info', VERSIONS => 3}

Выше будет показано максимум 3 версии ячейки, если они доступны.

10 голосов
/ 11 декабря 2011

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

 HTable tbl = new HTable(tableName);
 Get q= new Get(Bytes.toBytes(key));
 q.setMaxVersions(numberOfVersionsYouWant);
 Result row= tbl.get(q);
 NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> allVersions=row.getMap();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...