HBase常用功能和HBase+MapReduce使用總結
1.HBase如果加了列限定,如果該列不存在時返回的結果為empty.
看下面的程式碼:
?1 2 |
Get
get = new
Get(Bytes.toBytes( "100" ));
get.addColumn(Bytes.toBytes( "info" ),
Bytes.toBytes( "name" ));
|
這裡加入了列限定,也就是隻返回列族info下面的name欄位。但是如果name欄位根本不存在,返回的Result在呼叫result.isEmpty()時則返回為true,也就是說就算其他欄位存在,也什麼都沒返回來,包括rowkey也沒有返回來。當然,如果是限定多個列,只要一個列存在就可以正常返回。所以需要注意。
2.HBase在scan時指定的StartRow裡面不能加-
看下面的程式碼:
?1 2 3 4 |
Scan
scan = new
Scan();
scan.setStartRow(Bytes.toBytes( "3136947-" ));
scan.setStopRow(Bytes.toBytes( "3136947-"
+ 1 ));
|
3.HBase在scan時過濾掉指定列不存在的記錄
如果想返回某個欄位必須存在的行,不存在該欄位的記錄過濾掉不返回,方法如下:
?1 2 3 4 5 6 7 8 9 10 11 12 |
Scan
scan = new
Scan();
scan.setStartRow(Bytes.toBytes( "3136947" ));
scan.setStopRow(Bytes.toBytes( "3136947"
+ 1 ));
scan.addColumn(Bytes.toBytes( "info" ),
Bytes.toBytes( "name" ));
SingleColumnValueFilter
filter = new
SingleColumnValueFilter(Bytes.toBytes( "info" ),
Bytes.toBytes( "name" ),
CompareFilter.CompareOp.NOT_EQUAL,
Bytes.toBytes( "0" ));
filter.setFilterIfMissing(
|