3

我们使用 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 的行。当我像上面一样存储行键时,我该如何查询?

4

1 回答 1

3

您的行键有问题,如果您散列日期,您将无法将其用作扫描的开始/停止行。

你的行键应该是这样的:

[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))
);
于 2014-01-23T13:49:26.910 回答