行:
Key, Family:Qualifier, Value
Key, Family1:Qualifier, Value
Key, Family2:Qualifier, Value
Key, FamilyN:Qualifier, Value
在Java HBase API中,我们可以逐行扫描表格,然后为每一行获得FamilyMap
。
是否可以选择在不知道family
的情况下获取特定qualifier
的所有行?
如果是,表现之间是否存在差异:按键获取价值或按家庭获取价值?
答案 0 :(得分:1)
您可以像这样在特定家庭中使用扫描仪。在特定列族上获取扫描程序仅返回该族数据作为结果的一部分。这意味着作为该系列一部分的限定符和值可作为结果的一部分。
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);
}
至于获得所有行数据时的性能,它将相对较慢,因为获取了特定行的所有列族的所有数据。所以,除非你想让你所有的家人都没有得到整排。