【问题标题】:Hbase: Getting One row key from each and every regionHbase:从每个区域获取一个行键
【发布时间】:2013-08-06 06:43:48
【问题描述】:

有没有办法从每个区域获取一个行键?我现在一直在做的方式是顺序扫描每个区域的第一个 rowkey,但这非常慢。想知道有没有其他更好的方法。

PS:请不要问我为什么需要每个区域的一个随机行键:)

【问题讨论】:

    标签: hbase


    【解决方案1】:

    如果您想获取特定区域的起始行键,请尝试class HRegion 提供的public byte[] getStartKey()

    如果您想获取当前每个区域的起始行键,您可以使用class HTable中提供的public byte[][] getStartKeys()打开表。

    编辑:

    试试HRegionInfo提供的public byte[] getStartKey()(亲测)。

    我有一个名为 TestTable 的表,有 4 个区域,第二个区域的开始键是 0001617355。见下图:

    如果我这样做了:

    System.out.println("Key as String : " + Bytes.toString(HRegionInfo.getStartKey(Bytes.toBytes("TestTable,0001617355,1375740446704.68797fdaa6410c7f21d09444d649758c."))));

    在这个地区它给了我:

    作为字符串的键:0001617355

    这是你需要的吗?

    (我认为应该有一些方法可以通过 HTable 和 HRegion 来实现它。会尝试一下并告诉你)。

    HTH

    【讨论】:

    • HTable 中的 getStartKeys() 或 HRegion 中的 getStartKey() 返回区域起始边界,即它使用表的元数据返回起始行。它不返回表中存在的实际行。例如:如果一个表有 2 个区域,边界为 [000-001] 和 [001-002],并且第一个区域中的第一个 rowKey 是 00012345,HTable. getStartKeys() 将为第一个区域返回 000,而我感兴趣的是为第一个区域获取 00012345。
    • 由于我没有亲自测试过它们,所以我现在不能发表任何评论。但是我使用了 HRegionInfo 中可用的 getStartKey 并且它可以工作(我不知道我是怎么错过答案的。现在更新它)。
    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多