hadoop - HBase 获取单元格的所有时间戳值

标签 hadoop hbase

我的hbase实例中有以下场景

hbase(main):002:0> create 'test', 'cf'
0 row(s) in 1.4690 seconds

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1480 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0070 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0120 seconds

hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4'
0 row(s) in 0.0070 seconds

现在,如果您将看到,最后两个插入是针对相同的列族、相同的列和相同的键。但是,如果我正确理解 hbase,cf:c+row3 代表一个单元格,该单元格将具有插入值的所有时间戳版本。

但是简单的扫描只返回最近的值

hbase(main):010:0> scan 'test'       
ROW                   COLUMN+CELL                                               
 row1                 column=cf:a, timestamp=1317945279379, value=value1        
 row2                 column=cf:b, timestamp=1317945285731, value=value2        
 row3                 column=cf:c, timestamp=1317945301466, value=value4        
3 row(s) in 0.0250 seconds

如何获取一个单元格的所有带时间戳的值,或者如何执行基于时间范围的查询?

最佳答案

为了查看列的版本,您需要提供版本计数。

scan 'test', {VERSIONS => 3}

如果可用,将为您提供 2 个版本的列。你也可以在 get 中使用它:

get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3}

要获取特定时间的值,您也可以使用 TIMESTAMP。

get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466}

如果您需要获取“介于”2 个时间戳之间的值,您应该使用 TimestampsFilter .

关于hadoop - HBase 获取单元格的所有时间戳值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681933/

相关文章:

hadoop - 无法在使用 S3 进行存储的 EC2 中第二次运行 MapReduce

hadoop - Hive Union 按错误分组

MySQL 和 HBase 连接

hadoop - HBase聚合、Get And Put操作、Bulk操作

hadoop - java.lang.ClassNotFoundException : org. apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingInterface 问题

hadoop - apache Ambari Server 和 Agent 有什么区别

hadoop - 2n + 1 法定人数是什么意思?

hadoop - 如何启动数据节点? (找不到 start-dfs.sh 脚本)

java - HBase:从 HDFS 加载主协处理器

java - 将 Web UI 连接到 Apache HBase 的最有效方法是什么?