W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
由于HBase在內(nèi)部將數(shù)據(jù)存儲(chǔ)為KeyValue對(duì),因此KeyValue元數(shù)據(jù)過(guò)濾器(KeyValue Metadata Filters)會(huì)評(píng)估一行中是否存在鍵(即,ColumnFamily:列限定符),而不是前一節(jié)中的值。
FamilyFilter可用于過(guò)濾ColumnFamily。在掃描(Scan)中選擇ColumnFamilies通常比在過(guò)濾器(Filter)中選擇ColumnFamilies更好。
QualifierFilter可用于基于列(aka Qualifier)名稱(chēng)進(jìn)行過(guò)濾。
ColumnPrefixFilter可用于基于列(又名限定符)名稱(chēng)的主要部分進(jìn)行過(guò)濾。
ColumnPrefixFilter提前查找匹配每行前綴和每個(gè)涉及列族的第一列。它可以用來(lái)高效地獲取非常寬的行中的一個(gè)列的子集。
注意:同一列限定符可用于不同的列族。此過(guò)濾器將返回所有匹配的列。
示例:查找以“abc”開(kāi)頭的行和家族中的所有列
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的行為類(lèi)似于ColumnPrefixFilter,但允許指定多個(gè)前綴。
像ColumnPrefixFilter一樣,MultipleColumnPrefixFilter可以高效地搜索與最低前綴匹配的第一列,并且在前綴之間查找過(guò)去的列范圍。它可以用來(lái)從很寬的行中有效地獲得不連續(xù)的列集。
示例:查找以“abc”或“xyz”開(kāi)頭的行和家族中的所有列
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可以為每個(gè)涉及的列族尋找第一個(gè)匹配列。它可以用來(lái)有效地獲得非常寬的行的“切片”。即,你連續(xù)有一百萬(wàn)列,但你只想看看列bbbb-bbdd。
注意:同一列限定符可用于不同的列族。此過(guò)濾器將返回所有匹配的列。
示例:查找“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號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: