Support Questions

Find answers, ask questions, and share your expertise
Announcements
Celebrating as our community reaches 100,000 members! Thank you!

how to get Readable result in Hbase shell

avatar
Expert Contributor

 

hbase(main):023:0> scan 'test:test'
ROW                                   COLUMN+CELL                                                                                               
 11                                   column=cf:name, timestamp=1548146515498, value=1111111                                                    
 111                                  column=cf:name, timestamp=1543544919345, value=111                                                        
 CDH5.10.2                            column=cf:name, timestamp=1545118090526, value=this is a test                                             
 \xE6\x88\x91                         column=cf:name, timestamp=1548144898631, value=1111  

 

as you can see, "\xE6\x88\x91" is not readable, it seems it's hex mode ,  who can tell me  how to do get this value readable  ?

 

thanks.

1 REPLY 1

avatar
Mentor

The HBase shell currently only prints out ASCII printable range of characters, and not unicode, to make it easier to pass around values. In practice, HBase keys are often not designed to be readable and are binary forms (such as encoded integers of hashed values, etc.).

 

That said, the HBase shell is a programmable JRuby console, so you can use HBase Java APIs within it to get a desired output if you are going to be relying on HBase shell for your scripting work.

 

Here's a simple example:

 

hbase(main):013:0> config = org.apache.hadoop.hbase.HBaseConfiguration.create
=> #<Java::OrgApacheHadoopConf::Configuration:0x4a864d4d>

hbase(main):014:0> table = org.apache.hadoop.hbase.client.HTable.new(config, 't')
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x5e85c21b>

hbase(main):015:0> scanner = table.getScanner(Scan.new())
=> #<Java::OrgApacheHadoopHbaseClient::ClientScanner:0x5aa76ad2>

hbase(main):030:0> scanner.each do |row|
hbase(main):031:1* key = String.from_java_bytes(row.getRow())
hbase(main):032:1> puts "'#{key}'"
hbase(main):033:1> end
'我'