2011-10-07 18 views
14

tengo el siguiente escenario en mi ejemplo hbaseHBase obtener todos los valores de sellos de tiempo para una célula

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 

Ahora bien, si se verá, los dos últimos insertos son de la misma familia de columnas, misma columna y misma clave. Pero si entiendo hbase correctamente, cf: c + row3 representa una celda que tendrá todas las marcas de tiempo del valor insertado.

Sin embargo, un simple retorno de barrido único valor reciente

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 

¿Cómo consigo todos los valores de sellos de tiempo para una célula, o cómo realizar consulta basada rango de tiempo?

Respuesta

24

Para ver las versiones de una columna necesita dar el recuento de la versión.

scan 'test', {VERSIONS => 3} 

le dará 2 versiones de columnas si están disponibles. se puede usar en aswell get:

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

para obtener el valor de un tiempo spesific puede utilizar aswell marca de tiempo.

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

si usted necesita para obtener los valores "entre" 2 marcas de tiempo que debe utilizar TimestampsFilter.

+5

No es que sea el caso aquí, pero también debe asegurarse de que la tabla admita múltiples versiones, es decir, que le dé a CF el parámetro de versiones. – Tony

+4

de hecho, tienes razón @Tony. crear una tabla con: "create 'test', {NAME => 'cf', VERSIONS => N}" (por defecto es 3) sería una buena práctica. Y las versiones se aplican a las familias de columnas, no a las tablas, debe dar una versión a cada familia de columnas en la tabla. – frail

+0

Me pregunto si hay alguna forma de decirle a 'scan' que recupere todas las versiones existentes, en lugar de establecer un umbral –

1

La clave fila 'Row3' de cf: c para valor4 debe ser único de lo contrario, se sobreescribe:

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 

Columna 1 de cf1 tiene un valor de 'hola' se sobrescribe por segundo puesto con misma fila clave 1234 y un valor de '¡guau!'

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 

Ahora el segundo inserto contiene un nuevo valor 'bueno' para la columna 1 de cf1 y la consulta de exploración de los últimos 3 versiones ahora muestra 'wow!' y 'oye', por favor no las versiones se muestran en orden descendente.

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!   
1

Para cambiar el número de versiones permitidas en una familia de columnas utilice el siguiente comando:

alter 'test', NAME=>'cf', VERSIONS=>2 

continuación, añadir otra entrada:

put 'test', 'row1', 'cf:a2', 'value1e' 

continuación, ver las diferentes versiones:

get 'test', 'row1', {COLUMN => 'cf:a2', VERSIONS => 2} 

would devolver algo como:

COLUMN      CELL                     
cf:a2      timestamp=1457947804214, value=value1e            
cf:a2      timestamp=1457947217039, value=value1d            
2 row(s) in 0.0090 seconds 

Aquí hay un enlace para más detalles: https://learnhbase.wordpress.com/2013/03/02/hbase-shell-commands/.

Cuestiones relacionadas