Получить значение от семьи в HBase - PullRequest
2 голосов
/ 10 октября 2011

Row:

Key, Family:Qualifier, Value
Key, Family1:Qualifier, Value
Key, Family2:Qualifier, Value
Key, FamilyN:Qualifier, Value

В Java HBase API мы можем сканировать таблицу за строкой и затем получать FamilyMap для каждой строки.

Есть ли возможность получитьвсю строку для определенного family, не зная qualifier?

Если да, есть ли разница в сроках выполнения между: получить значение по ключу или получить значение по семейству?

1 Ответ

1 голос
/ 10 октября 2011

Вы можете получить сканер для определенной семьи, как это.Получение сканера для определенного семейства столбцов возвращает только данные этого семейства как часть результата.Это означает, что квалификатор и значения, являющиеся частью этого семейства, доступны как часть результата.

HTable table = new HTable(HBaseConfiguration.create(), "tablename");
Scan scan = new scan();
scan.setCaching(NUMBER_OF_ROWS_TO_CACHE);
//If you want to get data for all families then do not add any family.
scan.addFamily(Bytes.toBytes("columnFamilyName"));
ResultScanner scanner = table.getScanner(scan);

Если вы не добавите ни одного семейства к объекту scan, созданному выше, вы получитеданные всех семейств столбцов.Теперь вы можете отсканировать таблицу, выполнив итерации следующим образом:

for (Result result = scanner.next(); (result != null); result = scanner.next()) {
    //If you want a family specific data
    NavigableMap familyMap = result.getFamilyMap(Bytes.toBytes("familyname"));
    //if you want to get the entire row 
    Get get = new Get(result.getRow());
    Result entireRow = table.get(get); 

}

Что касается производительности, когда вы получите все данные строки, она будет сравнительно медленной, поскольку извлекаются все данные для всех семейств столбцов для конкретной строки.Так что, если вы не хотите, чтобы все ваши семьи не получили весь ряд.

...