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