Search code examples
hadoophbasejruby

Get column data from HBase via JRuby script


I can get value for certain column in HBase table via hbase shell:

hbase(main):002:0> scan 'some_table', {STARTROW => '7af02800f4c6478cde0f55e8bce34f4a2efa48f2', LIMIT => 1, COLUMNS => ['foo:bar']}
ROW                                         COLUMN+CELL
 7af02800f4c6478cde0f55e8bce34f4a2efa48f2   column=foo:bar, timestamp=0, value=http://someurl.com/some/path
1 row(s) in 0.4430 seconds

I would like to reproduce the same with jruby script. The following is my approach.

include Java
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Get

tableName = 'some_table'
conf = HBaseConfiguration.create
ht = HTable.new(conf, tableName)
key = '7af02800f4c6478cde0f55e8bce34f4a2efa48f2'
my_get = Get.new(key.to_java_bytes)
result = ht.get(my_get)

# And what to do now?

What is the correct way to obtain column value from HBase table via JRuby?


Solution

  • include Java
    import org.apache.hadoop.hbase.HBaseConfiguration
    import org.apache.hadoop.hbase.client.HTable
    import org.apache.hadoop.hbase.client.Get
    import org.apache.hadoop.hbase.util.Bytes
    
    tableName = 'some_table'
    conf = HBaseConfiguration.create
    ht = HTable.new(conf, tableName)
    key = '7af02800f4c6478cde0f55e8bce34f4a2efa48f2'
    my_get = Get.new(key.to_java_bytes)
    result = ht.get(my_get)
    
    # This
    puts Bytes.toStringBinary(result.getValue('foo'.to_java_bytes, 'bar'.to_java_bytes))