我有一个名为“users”的hbase表,rowkey由三部分组成:
rowkey看起来像是:${userid}_${messageid}_${timestamp}
鉴于我可以散列用户标识并使字段的长度固定,无论如何我可以进行像SQL查询这样的查询:
select distinct(userid) from users
如果rowkey不允许我这样查询,这是否意味着我需要创建一个单独的表只包含所有用户ID?我想如果我做那样的事情,当我插入一条记录时,它就不再是原子的了,becoz我正在处理没有事务的两个表。
答案 0 :(得分:1)
您可以这样做,但作为地图/减少作业而非直接查询
答案 1 :(得分:0)
你可以使用HashSet来做到这一点。像这样:
public Set<String> getDistinctCol(String tableName,String colFamilyName, String colName)
{
Set<String> set = new HashSet<String>();
ResultScanner rs=null;
Result r = null;
String s = null;
try
{
HTable table = new HTable(conf, tableName);
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(colFamilyName),Bytes.toBytes(colName));
rs = table.getScanner(scan);
while((res=rs.next()) != null)
{
byte [] col = res.getValue(Bytes.toBytes(colFamilyName+":"+colName));
s = Bytes.toString(col);
set.add(s);
}
} catch (IOException e)
{
System.out.println("Exception occured in retrieving data");
}
finally
{
rs.close();
}
return set;
*你的案例中的col是userID。
HTH