HBASE - выбрать отдельный запрос для ключа строки

У меня есть таблица hbase под названием "пользователи", rowkey состоит из трех частей:

  1. Идентификатор пользователя
  2. MessageId
  3. отметка времени

rowkey выглядит так: ${userid}_${messageid}_${timestamp}

Учитывая, что я могу хэшировать идентификатор пользователя и сделать длину поля фиксированной, есть ли возможность выполнить запрос, подобный SQL-запросу:

select distinct(userid) from users

Если rowkey не позволяет мне делать подобные запросы, значит ли это, что мне нужно создать отдельную таблицу, содержащую только идентификаторы пользователей? Я предполагаю, что если я сделаю что-то подобное, это не будет атомарным, когда я вставлю запись в, потому что я имею дело с двумя таблицами без транзакций.

2 ответа

Решение

Вы можете сделать это, но в качестве карты / сокращения работы, а не прямой запрос

Вы можете использовать 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.

НТН

Другие вопросы по тегам