在HBase中获得家人的价值

时间:2011-10-10 17:00:01

标签: java hadoop hbase

行:

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

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

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

如果是,表现之间是否存在差异:按键获取价值或按家庭获取价值?

1 个答案:

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

}

至于获得所有行数据时的性能,它将相对较慢,因为获取了特定行的所有列族的所有数据。所以,除非你想让你所有的家人都没有得到整排。