HBase:如果行键存储为字节数组值,如何使用行键范围获取行

时间:2014-01-23 10:48:14

标签: hbase database-scan

我们使用HBase存储从oracle到hdfs的数据。这里我们将行键设计为字节数组值。行键由(Md5(schema name).getBytes() + Md5(date (format = yyyy-mm-dd)).getBytes() + ByteBuffer.allocate(8).putLong(pkid).array())之类的复合键构成。这里PKID是一个很长的值。

如果我想获取特定模式和特定日期的所有行,我可以使用startrow和endrow查询hbase表,还是以任何其他方式查询这样的?

当我将行密钥存储为user1_20130123...user1_20130127等字符串时 我可以使用

过滤表格
scan 'TempTable', {
    COLUMNS => ['CF:NAME'],
    LIMIT => 10,
    STARTROW => 'user1_20100101',
    ENDROW => 'user1_20100115'
}

这里我在这些日期获取user1的行。当我像上面那样存储行键时,如何查询?

1 个答案:

答案 0 :(得分:3)

您的rowkeys存在问题,如果您对日期进行哈希处理,则无法将其用作扫描的开始/停止行。

你的rowkeys应该是这样的:

[16B_schema_MD5_hash][8B_long_timestamp][8B_pkid]

你可以这样查询:

Scan myScan = new Scan( 
    Bytes.add(Bytes.toBytes(schemaNameMD5Hash), Bytes.toBytes(startTimestamp)),
    Bytes.add(Bytes.toBytes(schemaNameMD5Hash), Bytes.toBytes(stopTimestamp))
);