行:

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

在Java HBase API中,我们可以逐行扫描表,然后为每一行获取FamilyMap

是否可以在不知道family的情况下获取特定qualifier的所有行?

如果是,那么在绩效方面是否存在区别:按键获取值(value)或按家庭获取值(value)?

最佳答案

您可以像这样在特定家庭中使用扫描仪。在特定的色谱柱族上使用扫描仪只会返回该族数据作为结果的一部分。这意味着作为该族一部分的限定词和值可作为结果的一部分使用。

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);

}

至于性能,当您获取所有行数据时,它会相对较慢,因为将获取特定行的所有列族的所有数据。因此,除非您希望您的所有家人都不要整整一排。

关于java - 在HBase中按家庭获得值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7716162/

10-13 04:06