Вы можете получить сканер для определенной семьи, как это.Получение сканера для определенного семейства столбцов возвращает только данные этого семейства как часть результата.Это означает, что квалификатор и значения, являющиеся частью этого семейства, доступны как часть результата.
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);
}
Что касается производительности, когда вы получите все данные строки, она будет сравнительно медленной, поскольку извлекаются все данные для всех семейств столбцов для конкретной строки.Так что, если вы не хотите, чтобы все ваши семьи не получили весь ряд.