【问题标题】:HBase getting all timestamped values for a cellHBase 获取单元格的所有时间戳值
【发布时间】:2011-10-07 00:21:40
【问题描述】:

我的 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

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

【问题讨论】:

    标签: hadoop hbase


    【解决方案1】:

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

    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。

    【讨论】:

    • 这里不是这样,但您还应该确保表格支持多个版本,即为 CF 提供版本参数。
    • 确实,你是对的@Tony。使用以下命令创建表:“create 'test', {NAME => 'cf', VERSIONS => N }”(默认为 3)将是一个好习惯。版本适用于列族而不是表,您应该为表中的每个列族提供版本。
    • 我想知道是否有任何方法可以告诉“扫描”检索所有现有版本,而不是设置阈值
    • @Tony,Frail,所以默认情况下不启用版本控制?必须将其指定为列族结构的一部分。我说的对吗?
    • @KaushikLele 您可以查看hbase.apache.org/book.html#versions 了解更多详情。作为对您问题的回答:“在 HBase 0.96 之前,保留的默认版本数为 3,但在 0.96 和更新版本中已更改为 1。”
    【解决方案2】:

    要更改列族中允许的版本数,请使用以下命令:

     alter 'test', NAME=>'cf', VERSIONS=>2
    

    然后添加另一个条目:

    put 'test', 'row1', 'cf:a2', 'value1e'
    

    然后查看不同的版本:

    get 'test', 'row1', {COLUMN => 'cf:a2', VERSIONS => 2}
    

    会返回类似:

    COLUMN                        CELL                                                                                
     cf:a2                        timestamp=1457947804214, value=value1e                                              
     cf:a2                        timestamp=1457947217039, value=value1d                                              
    2 row(s) in 0.0090 seconds
    

    这里有一个链接了解更多详情: https://learnhbase.wordpress.com/2013/03/02/hbase-shell-commands/.

    【讨论】:

      【解决方案3】:

      cf:c 中 value4 的行键 'row3' 应该是唯一的,否则会被覆盖:

      hbase(main):052:0> scan 'mytable' , {COLUMN => 'cf1:1', VERSION => 3}
      ROW                         COLUMN+CELL                                                                   
       1234                       column=cf1:1, timestamp=1405796300388, value=hello                            
      1 row(s) in 0.0160 seconds
      
      hbase(main):053:0> put 'mytable', 1234, 'cf1:1', 'wow!'
      0 row(s) in 0.1020 seconds
      

      cf1 的值为 'hello' 的第 1 列被具有相同行键 1234 和值为 'wow!' 的第二个 put 覆盖

      hbase(main):054:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
      ROW                   COLUMN+CELL                                               
       1234                 column=cf1:1, timestamp=1405831703617, value=wow!         
      2 row(s) in 0.0310 seconds
      

      现在第二个插入包含 cf1 的第 1 列的新值“hey”,并且最近 3 个版本的扫描查询现在显示“哇!”和“嘿”,请不要按降序显示版本。

      hbase(main):055:0> put 'mytable', 123, 'cf1:1', 'hey'
      
      hbase(main):004:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
      ROW                   COLUMN+CELL                                               
       123                  column=cf1:1, timestamp=1405831295769, value=hey          
       1234                 column=cf1:1, timestamp=1405831703617, value=wow!         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-23
        相关资源
        最近更新 更多