8

Using Hbase API (Get/Put) or HBQL API, is it possible to retrieve timestamp of a particular column?

Abhijeet Pathak
  • 1,948
  • 3
  • 20
  • 28

4 Answers4

14

Assuming your client is configured and you have a table setup. Doing a get returns a Result

Get get = new Get(Bytes.toBytes("row_key"));
Result result_foo = table.get(get);

A Result is backed by a KeyValue. KeyValues contain the timestamps. You can get either a list of KeyValues with list() or get an array with raw(). A KeyValue has a get timestamp method.

result_foo.raw()[0].getTimestamp()
codingFoo
  • 916
  • 12
  • 23
  • 1
    does [0] indicate the first column in hbase? is there a way to the timestamp for a particular specified column name? – adbar Apr 24 '18 at 06:25
  • 1
    It has been long enough that I dont recall any details from those docs. Things have likely changed since then. Best thing is to fire up a console for you hbase setup and poke around. – codingFoo Jan 17 '19 at 18:56
1

I think the follow will be better:

KeyValue kv = result.getColumnLatest(family, qualifier);
String status = Bytes.toString(kv.getValue());
Long timestamp = kv.getTimestamp();

since Result#getValue(family, qualifier) is implemented as

public byte[] getValue(byte[] family, byte[] qualifier) {
        KeyValue kv = this.getColumnLatest(family, qualifier);
        return kv == null ? null : kv.getValue();
    }
1

@codingFoo's answer assumes all timestamps are the same for all cells, but op's question was for a specific column. In that respect, similar to @peibin wang's answer, I would propose the following if you would like the last timestamp for your column:

Use the getColumnLatestCell method on your Result object, and then call the getTimestamp method like so:

Result res = ...
res.getColumnLatestCell(Bytes.toBytes("column_family"), Bytes.toBytes("column_qualifier")).getTimestamp();

If you want access to a specific timestamp you could use the getColumnCells which returns all cells for a specified column, but then you will have to choose between the cells with a get(int index) and then call getTimestamp()

Matt
  • 144
  • 15
0
result_foo.rawCells()(0).getTimestamp

is a good style

Tunaki
  • 132,869
  • 46
  • 340
  • 423
ljp
  • 135
  • 5