Blogs

HBase format

Formateando el valor de una columna al realizar un  hbase get

La notación de la shell de hbase es bastante poco amigable, por un lado porque la forma de escribir las sentencias es poco intuitiva, al principio, y por otro lado porque los valores son simpre arrays de bytes. Por tanto la salida de un comando suele leerse mal, sobre todo si lo que se ha almacenado no son los bytes de un string

 100316046_2017_2_1                                  column=23:1485991943_latitud, timestamp=1486109715526, value=@Ea\x04;nS\x85                                                                             
 100316046_2017_2_1                                  column=23:1485991943_longitud, timestamp=1486109715526, value=\xC0\x009\xF7\x87\xE6/\xDE

Pero un get de hbase como el aterior se puede formatear sabiendo el tipo de dato que se almacena en el qualifier. Por ejemplo en el caso anterior \xC0\x009\xF7\x87\xE6/\xDE corresponde con la representación de los bytes de un double en un string. Para poder ver la representación correcta de este byte[] se puede aplicar el siguiente formato a la salida del scan

get 'map', 'row-key', 'family:qualifier:c(Java::OrgApacheHadoopHbaseUtil::Bytes).toDouble'

Y obtendremos como resultado

hbase(main):013:0> get 'map', 'row-key', 'family:qualifier:c(Java::OrgApacheHadoopHbaseUtil::Bytes).toDouble'
COLUMN                                               CELL                                                                                                                                                    
 family:qualifier                               timestamp=1486109715526, value=43.281710106997

 

(Java::OrgApacheHadoopHbaseUtil::Bytes).toDouble corresponde al siguiente código java ejecutado desde ruby

org.apache.hadoop.hbase.util.Bytes().toDuble(byte[] columnValue)

 

Lo que quiere decir que podremos aplicar para dar formato a nuestro comando de hbase shell cualquier método estático de java que tenga como parámetro un byte[]

Un ejemplo que he encontrado mucho más interesante que lo que acabo de explicar es el siguiente, en el que en una columna de hbase se ha guardado un byte[] de avro y luego se recupera y se muestra como un JSON

 

 

 

 

 

 

 

More Blog Entries

Interprete de zeppelin para hbase

Dentro de un proyecto de bigdata que estamos haciendo hemos usado como notebook del proyecto, ...

Basic metadata to deal with document lifecycle status

A basic customization to manage and visualize content lifecycle in Document Library may be...

0 Comments