HBase получает все метки времени для ячейки - PullRequest
14 голосов
/ 07 октября 2011

у меня есть следующий сценарий в моем экземпляре 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

Как мнеполучить все метки времени для ячейки или как выполнить запрос на основе временного диапазона?

Ответы [ 3 ]

24 голосов
/ 07 октября 2011

Для просмотра версий столбца необходимо указать количество версий.

scan 'test', {VERSIONS => 3}

даст вам 2 версии столбцов, если они доступны. Вы можете использовать его в get aswell:

get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3}

для получения значения специального времени вы можете использовать TIMESTAMP также.

get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466}

если вам нужно получить значения «между» 2 временными метками, вам следует использовать TimestampsFilter .

2 голосов
/ 14 марта 2016

Чтобы изменить количество версий, разрешенных в семействе столбцов, используйте следующую команду:

 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/.

1 голос
/ 20 июля 2014

Ключ строки '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!         
...