hbase:获取带有时间戳的行数据请求

wpx232ag  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(652)

我通过javaapi创建了一个hbase表,并通过put添加了数据。我还可以用相应的get读取java中的数据。hbase文档说明,也可以使用get请求读取单元格值,例如在浏览器中,请参阅文档。
以下请求适用于我,它返回整行:

http://my_hbase_url:12345/dm-table/exampleRow/family:html?v=1

结果是一个xml,如下所示:

<CellSet>
  <Row key="ZXhhbXBsZVJvdw==">
    <Cell column="ZmFtaWx5Omh0bWw=" timestamp="1466667016879">PGh0bWw+Li4uTXkgSFRNTC4uLjwvaHRtbD4=</Cell>
  </Row>
</CellSet>

如果你看一下时间戳 1466667016879 ,但当我打电话时

http://my_hbase_url:12345/dm-table/exampleRow/family:html/1466667016879

我得到一个 not found 结果!java代码也起作用,给我这个时间戳:

HTable table = new HTable(config, TABLE_NAME.getBytes());

Get g = new Get("exampleRow".getBytes());
g.setTimeStamp(1466667016879L);

Result r = table.get(g);
System.out.println("Timestamp: " + r.rawCells()[0].getTimestamp());

byte[] value = r.getValue(CF_DEFAULT.getBytes(), "html".getBytes());
String valueStr = new String(value);
System.out.println("GET: " + valueStr);

这张照片:

Timestamp: 1466667016879
GET: <html>...My HTML...</html>

所以时间戳确实存在,但是httpget请求不能与时间戳一起工作,有人能帮忙吗?

vwkv1x7d

vwkv1x7d1#

url中的时间戳将查找具有较早时间戳的最新数据集!
请看下面的例子:
当你打电话时。 http://my_hbase_url:12345/dm-table/exampleRow/family:html 得到以下结果:

<CellSet>
  <Row key="ZXhhbXBsZVJvdw==">
    <Cell column="ZmFtaWx5Omh0bWw=" timestamp="1466667016879">PGh0bWw+Li4uTXkgSFRNTC4uLjwvaHRtbD4=</Cell>
  </Row>
</CellSet>

因此,如果您希望通过时间戳获得这个结果(例如,因为您保存了不同版本的数据),您可以将时间戳添加到url中,以获得具有较早时间戳的最新数据集。因此,要获得上面显示的数据集,您必须添加 /<timestamp + 1> 到url:

http://my_hbase_url:12345/dm-table/exampleRow/family:html/1466667016880

这将产生与上面所示相同的结果。如果这是唯一或最早的版本,请致电 http://my_hbase_url:12345/dm-table/exampleRow/family:html/1466667016879 找不到任何结果,结果是 not found 结果,如上述问题所述。
但是,您必须使用 <timestamp + 1> (或更高)以获取预期数据!
感谢@whitefret提供的这个解决提示!

相关问题