Using Hbase API (Get/Put) or HBQL API, is it possible to retrieve timestamp of a particular column?
4 Answers
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()

- 916
- 12
- 23
-
1does [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
-
1It 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
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();
}

- 11
- 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()

- 144
- 15