我有一个带有示例记录的hbase表,如下所示:
03af639717ae10eb743253433147e133 column=u:a, timestamp=1434300763147, value=apple
10f3d7f8fe8f25d5bdf52343a2601227 column=u:a, timestamp=1434300763148, value=mapple
20164b1aff21bc14e94623423a9d645d column=u:a, timestamp=1534300763142, value=papple
44d1cb38271362d20911a723410b2c67 column=u:a, timestamp=1634300763141, value=scapple
我迷失了,因为我试图根据时间戳取出行值。我正在使用spring data hadoop
。
我只能使用以下代码获取所有记录:
private static final byte[] CF_INFO = Bytes.toBytes("u");
private static final byte[] baseUrl = Bytes.toBytes("a");
List<Model> allNewsList
= hbaseTemplate.find(tableName, columnFamily, new RowMapper<News>()
{
@Override
public Model mapRow(Result result, int rowNum)
throws Exception
{
String dateString = TextUtils.getTimeStampInLong(result.toString());
String rowKey = Bytes.toString(result.getRow());
return new Model(
rowKey,
Bytes.toString(result.getValue(CF_INFO, col_a)
);
}
});
如何应用过滤器,以便能够在时间戳[1434300763147,1534300763142]
内获取记录。
答案 0 :(得分:1)
希望这有一天能对某人有所帮助。
final org.apache.hadoop.hbase.client.Scan scan = new Scan();
scan.setTimeRange(1434300763147,1534300763142);
final List<Model> yourObjects = hbaseTemplate.find(tableName, scan, mapper);
另外,值得一提的是,时间范围的最大值是互斥的,因此,如果要返回带有该时间戳的记录,请确保将时间范围的最大值增加1。
答案 1 :(得分:0)
使用Hbase客户端的扫描程序对象解决了该问题。