HBase получает все временные значения для ячейки
У меня есть следующий сценарий в моем экземпляре hbase
hbase(main):002:0> create 'test', 'cf'
0 row(s) in 1.4690 seconds
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1480 seconds
hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0070 seconds
hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0120 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4'
0 row(s) in 0.0070 seconds
Теперь, если вы увидите, последние две вставки предназначены для одного и того же семейства столбцов, одного и того же столбца и того же ключа. Но если я правильно понимаю hbase, cf: c + row3 представляет ячейку, которая будет иметь все временные версии вставленного значения.
Но простое сканирование возвращает только последнее значение
hbase(main):010:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1317945279379, value=value1
row2 column=cf:b, timestamp=1317945285731, value=value2
row3 column=cf:c, timestamp=1317945301466, value=value4
3 row(s) in 0.0250 seconds
Как получить все временные значения для ячейки или как выполнить запрос на основе диапазона времени?
Ответы
Ответ 1
Чтобы увидеть версии столбца, вам нужно указать количество версий.
scan 'test', {VERSIONS => 3}
предоставит вам 2 версии столбцов, если они доступны. вы можете использовать его также:
get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3}
для получения значения spesific time вы также можете использовать TIMESTAMP.
get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466}
если вам нужно получить значения "между" 2 метками времени, вы должны использовать TimestampsFilter.
Ответ 2
Строка "row3" строки cf: c для value4 должна быть уникальной, иначе она будет перезаписана:
hbase(main):052:0> scan 'mytable' , {COLUMN => 'cf1:1', VERSION => 3}
ROW COLUMN+CELL
1234 column=cf1:1, timestamp=1405796300388, value=hello
1 row(s) in 0.0160 seconds
hbase(main):053:0> put 'mytable', 1234, 'cf1:1', 'wow!'
0 row(s) in 0.1020 seconds
Столбец 1 cf1, имеющий значение "hello", перезаписывается вторым положением с тем же ключом строки 1234 и значением "wow!"
hbase(main):054:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
ROW COLUMN+CELL
1234 column=cf1:1, timestamp=1405831703617, value=wow!
2 row(s) in 0.0310 seconds
Теперь вторая вставка содержала новое значение "hey" для столбца 1 cf1, а запрос сканирования для последних 3 версий теперь показывает "wow!". и "эй", пожалуйста, не версии отображаются в порядке убывания.
hbase(main):055:0> put 'mytable', 123, 'cf1:1', 'hey'
hbase(main):004:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
ROW COLUMN+CELL
123 column=cf1:1, timestamp=1405831295769, value=hey
1234 column=cf1:1, timestamp=1405831703617, value=wow!
Ответ 3
Чтобы изменить количество версий, разрешенных в семействе столбцов, используйте следующую команду:
alter 'test', NAME=>'cf', VERSIONS=>2
затем добавьте еще одну запись:
put 'test', 'row1', 'cf:a2', 'value1e'
затем просмотрите разные версии:
get 'test', 'row1', {COLUMN => 'cf:a2', VERSIONS => 2}
вернет что-то вроде:
COLUMN CELL
cf:a2 timestamp=1457947804214, value=value1e
cf:a2 timestamp=1457947217039, value=value1d
2 row(s) in 0.0090 seconds
Вот ссылка для более подробной информации:
https://learnhbase.wordpress.com/2013/03/02/hbase-shell-commands/.