W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
由于HBase在內(nèi)部將數(shù)據(jù)存儲為KeyValue對,因此KeyValue元數(shù)據(jù)過濾器(KeyValue Metadata Filters)會評估一行中是否存在鍵(即,ColumnFamily:列限定符),而不是前一節(jié)中的值。
FamilyFilter可用于過濾ColumnFamily。在掃描(Scan)中選擇ColumnFamilies通常比在過濾器(Filter)中選擇ColumnFamilies更好。
QualifierFilter可用于基于列(aka Qualifier)名稱進行過濾。
ColumnPrefixFilter可用于基于列(又名限定符)名稱的主要部分進行過濾。
ColumnPrefixFilter提前查找匹配每行前綴和每個涉及列族的第一列。它可以用來高效地獲取非常寬的行中的一個列的子集。
注意:同一列限定符可用于不同的列族。此過濾器將返回所有匹配的列。
示例:查找以“abc”開頭的行和家族中的所有列
Table t = ...;
byte[] row = ...;
byte[] family = ...;
byte[] prefix = Bytes.toBytes("abc");
Scan scan = new Scan(row, row); // (optional) limit to one row
scan.addFamily(family); // (optional) limit to one family
Filter f = new ColumnPrefixFilter(prefix);
scan.setFilter(f);
scan.setBatch(10); // set this if there could be many columns returned
ResultScanner rs = t.getScanner(scan);
for (Result r = rs.next(); r != null; r = rs.next()) {
for (KeyValue kv : r.raw()) {
// each kv represents a column
}
}
rs.close();
MultipleColumnPrefixFilter的行為類似于ColumnPrefixFilter,但允許指定多個前綴。
像ColumnPrefixFilter一樣,MultipleColumnPrefixFilter可以高效地搜索與最低前綴匹配的第一列,并且在前綴之間查找過去的列范圍。它可以用來從很寬的行中有效地獲得不連續(xù)的列集。
示例:查找以“abc”或“xyz”開頭的行和家族中的所有列
Table t = ...;
byte[] row = ...;
byte[] family = ...;
byte[][] prefixes = new byte[][] {Bytes.toBytes("abc"), Bytes.toBytes("xyz")};
Scan scan = new Scan(row, row); // (optional) limit to one row
scan.addFamily(family); // (optional) limit to one family
Filter f = new MultipleColumnPrefixFilter(prefixes);
scan.setFilter(f);
scan.setBatch(10); // set this if there could be many columns returned
ResultScanner rs = t.getScanner(scan);
for (Result r = rs.next(); r != null; r = rs.next()) {
for (KeyValue kv : r.raw()) {
// each kv represents a column
}
}
rs.close();
ColumnRangeFilter允許有效的幀內(nèi)行掃描。
ColumnRangeFilter可以為每個涉及的列族尋找第一個匹配列。它可以用來有效地獲得非常寬的行的“切片”。即,你連續(xù)有一百萬列,但你只想看看列bbbb-bbdd。
注意:同一列限定符可用于不同的列族。此過濾器將返回所有匹配的列。
示例:查找“bbbb”(含)和“bbdd”(含)之間的行和族中的所有列
Table t = ...;
byte[] row = ...;
byte[] family = ...;
byte[] startColumn = Bytes.toBytes("bbbb");
byte[] endColumn = Bytes.toBytes("bbdd");
Scan scan = new Scan(row, row); // (optional) limit to one row
scan.addFamily(family); // (optional) limit to one family
Filter f = new ColumnRangeFilter(startColumn, true, endColumn, true);
scan.setFilter(f);
scan.setBatch(10); // set this if there could be many columns returned
ResultScanner rs = t.getScanner(scan);
for (Result r = rs.next(); r != null; r = rs.next()) {
for (KeyValue kv : r.raw()) {
// each kv represents a column
}
}
rs.close();
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: