• hbase各种遍历查询shell语句 包含过滤组合条件


    1. import java.io.IOException;  
    2. import java.util.ArrayList;  
    3. import java.util.Arrays;  
    4. import java.util.List;  
    5.   
    6. import org.apache.hadoop.conf.Configuration;  
    7. import org.apache.hadoop.hbase.Cell;  
    8. import org.apache.hadoop.hbase.CellUtil;  
    9. import org.apache.hadoop.hbase.HBaseConfiguration;  
    10. import org.apache.hadoop.hbase.TableName;  
    11. import org.apache.hadoop.hbase.client.Admin;  
    12. import org.apache.hadoop.hbase.client.Connection;  
    13. import org.apache.hadoop.hbase.client.ConnectionFactory;  
    14. import org.apache.hadoop.hbase.client.Get;  
    15. import org.apache.hadoop.hbase.client.Result;  
    16. import org.apache.hadoop.hbase.client.ResultScanner;  
    17. import org.apache.hadoop.hbase.client.Scan;  
    18. import org.apache.hadoop.hbase.client.Table;  
    19. import org.apache.hadoop.hbase.filter.BinaryComparator;  
    20. import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;  
    21. import org.apache.hadoop.hbase.filter.ColumnPaginationFilter;  
    22. import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;  
    23. import org.apache.hadoop.hbase.filter.ColumnRangeFilter;  
    24. import org.apache.hadoop.hbase.filter.DependentColumnFilter;  
    25. import org.apache.hadoop.hbase.filter.FamilyFilter;  
    26. import org.apache.hadoop.hbase.filter.Filter;  
    27. import org.apache.hadoop.hbase.filter.FilterList;  
    28. import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;  
    29. import org.apache.hadoop.hbase.filter.FuzzyRowFilter;  
    30. import org.apache.hadoop.hbase.filter.InclusiveStopFilter;  
    31. import org.apache.hadoop.hbase.filter.KeyOnlyFilter;  
    32. import org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter;  
    33. import org.apache.hadoop.hbase.filter.PageFilter;  
    34. import org.apache.hadoop.hbase.filter.PrefixFilter;  
    35. import org.apache.hadoop.hbase.filter.QualifierFilter;  
    36. import org.apache.hadoop.hbase.filter.RandomRowFilter;  
    37. import org.apache.hadoop.hbase.filter.RegexStringComparator;  
    38. import org.apache.hadoop.hbase.filter.RowFilter;  
    39. import org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter;  
    40. import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;  
    41. import org.apache.hadoop.hbase.filter.SkipFilter;  
    42. import org.apache.hadoop.hbase.filter.SubstringComparator;  
    43. import org.apache.hadoop.hbase.filter.TimestampsFilter;  
    44. import org.apache.hadoop.hbase.filter.ValueFilter;  
    45. import org.apache.hadoop.hbase.filter.WhileMatchFilter;  
    46. import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;  
    47. import org.apache.hadoop.hbase.util.Bytes;  
    48. import org.apache.hadoop.hbase.util.Pair;  
    49.   
    50. public class HbaseUtils {  
    51.   
    52.     public static Admin admin = null;  
    53.     public static Connection conn = null;  
    54.   
    55.     public HbaseUtils() {  
    56.         Configuration conf = HBaseConfiguration.create();  
    57.         conf.set("hbase.zookeeper.quorum", "h71:2181");  
    58.         conf.set("hbase.rootdir", "hdfs://h71:9000/hbase");   
    59.         try {  
    60.             conn = ConnectionFactory.createConnection(conf);  
    61.             admin = conn.getAdmin();  
    62.         } catch (IOException e) {  
    63.             e.printStackTrace();  
    64.         }  
    65.     }  
    66.     public static void main(String[] args) throws Exception {  
    67.         HbaseUtils hbase = new HbaseUtils();  
    68.         //1,FamilyFilter:基于“列族”来过滤数据;  
    69. //      hbase.FamilyFilter("scores");  
    70.         //2,QualifierFilter:基于“列名”来过滤数据;  
    71. //      hbase.QualifierFilter("scores");  
    72.         //3.RowFilter:基于rowkey来过滤数据;  
    73. //      hbase.RowFilter("scores","zhangsan01");  
    74.         //4.PrefixFilter:基于rowkey前缀来过滤数据;  
    75. //      hbase.PrefixFilter("scores","zhang");  
    76.         //后缀过滤数据  
    77. //      hbase.HouZui("scores");  
    78.         //5,ColumnPrefixFilter:基于列名前缀来过滤数据;  
    79. //      hbase.ColumnPrefixFilter("scores");  
    80.         //6,MultipleColumnPrefixFilter:ColumnPrefixFilter的加强版;  
    81. //      hbase.MultipleColumnPrefixFilter("scores");  
    82.         //7,ColumnCountGetFilter:限制每行返回多少列;  
    83. //      hbase.columnCountGetFilter();  
    84.         //8,ColumnPaginationFilter:对一行的所有列分页,只返回[limit, offset]范围内的列;  
    85. //      hbase.ColumnPaginationFilter("scores");  
    86.         //9,ColumnRangeFilter:可用于获得一个范围的列  
    87. //      hbase.ColumnRangeFilter("scores");  
    88.         //10,DependentColumnFilter:返回(与(符合条件[列族,列名]或[列族,列名,值]的参考列)具有相同的时间戳)的所有列,即:基于比较器过滤参考列,基于参考列的时间戳过滤其他列;  
    89. //      hbase.DependentColumnFilter("scores");  
    90.         //11,FirstKeyOnlyFilter:结果只返回每行的第一个值对;  
    91. //      hbase.FirstKeyOnlyFilter("scores");  
    92.         //12,FuzzyRowFilter:模糊row查询;  
    93. //      hbase.FuzzyRowFilter("scores");  
    94.         //13,InclusiveStopFilter:将stoprow也一起返回;  
    95. //      hbase.InclusiveStopFilter("scores");  
    96.         //14,KeyOnlyFilter:只返回行键;  
    97. //      hbase.KeyOnlyFilter("scores");  
    98.         //15,PageFilter: 取回XX条数据  ;  
    99. //      hbase.PageFilter("scores");  
    100.         //16,RandomRowFilter:随机获取一定比例(比例为参数)的数据;  
    101. //      hbase.RandomRowFilter("scores");  
    102.         //17,SingleColumnValueFilter:基于参考列的值来过滤数据;  
    103. //      hbase.SingleColumnValueFilter("scores");  
    104.         //18,ValueFilter:基于值来过滤数据;  
    105. //      hbase.ValueFilter("scores");  
    106.         //19,SkipFilter:当过滤器发现某一行中的一列要过滤时,就将整行数据都过滤掉;  
    107. //      hbase.SkipFilter("scores");  
    108.         //20,TimestampsFilter:基于时间戳来过滤数据;  
    109. //      hbase.TimestampsFilter("scores");  
    110.         //21,WhileMatchFilter:一旦遇到一条符合过滤条件的数据,就停止扫描;  
    111. //      hbase.WhileMatchFilter("scores");  
    112.         //22,FilterList:多个过滤器组合过滤。  
    113. //      hbase.FilterList("scores");  
    114.     }  
    115.   
    116.     /** 
    117.     1,FamilyFilter 
    118.             a,按family(列族)查找,取回所有符合条件的“family” 
    119.             b,构造方法第一个参数为compareOp 
    120.             c,第二个参数为WritableByteArrayComparable,有BinaryComparator, BinaryPrefixComparator, 
    121.              BitComparator, NullComparator, RegexStringComparator, SubstringComparator这些类, 
    122.                       最常用的为BinaryComparator 
    123.     */  
    124.     public void FamilyFilter(String tableName) throws Exception {  
    125.         Table table = conn.getTable(TableName.valueOf(tableName));  
    126.         Scan scan = new Scan();  
    127.         Filter filter = new FamilyFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("grc")));  
    128.         scan.setFilter(filter);  
    129.         ResultScanner scanner = table.getScanner(scan);  
    130.         for (Result r : scanner) {  
    131.             for (Cell cell : r.rawCells()) {  
    132.                 System.out.println(  
    133.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    134.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    135.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    136.             }  
    137.         }  
    138.     }  
    139. /* 
    140. hbase(main):224:0> scan 'scores', {FILTER => "FamilyFilter(<=,'binary:grc')"} 
    141. 或者 
    142. hbase(main):011:0> scan 'scores', FILTER => "FamilyFilter(<=,'binary:grc')" 
    143. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    144.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    145.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    146.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    147.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    148.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    149.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    150.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    151.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    152.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    153. 3 row(s) in 0.0220 seconds  
    154. */  
    155.       
    156.     /** 
    157.     2,QualifierFilter 
    158.        类似于FamilyFilter,取回所有符合条件的“列” 
    159.        构造方法第一个参数   compareOp 
    160.        第二个参数为WritableByteArrayComparable 
    161.     */  
    162.     public void QualifierFilter(String tableName) throws Exception {  
    163.         Table table = conn.getTable(TableName.valueOf(tableName));  
    164.         Scan scan = new Scan();  
    165.         Filter filter = new QualifierFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("grc")));  
    166.         //这里输的参数是相应位置比大小,及当输入ms的时候,所有列名的第一位小于等于m,如果第一位相等则比较第二位的大小。一开始没理解,所以一开始参数输入math或course的时候把我整懵了。  
    167.         scan.setFilter(filter);  
    168.         ResultScanner scanner = table.getScanner(scan);  
    169.         for (Result r : scanner) {  
    170.             for (Cell cell : r.rawCells()) {  
    171.                 System.out.println(  
    172.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    173.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    174.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    175.             }  
    176.         }  
    177.     }  
    178. /* 
    179. hbase(main):221:0> scan 'scores', {FILTER => "QualifierFilter(<=,'binary:b')"} 
    180. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    181.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    182.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    183.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    184.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    185.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    186.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    187. 3 row(s) in 0.0470 seconds 
    188. */  
    189.       
    190.     /** 
    191.     3,RowFilter 
    192.         构造方法参数设置类似于FamilyFilter,符合条件的row都返回 
    193.         但是通过row查询时,如果知道开始结束的row,还是用scan的start和end方法更直接并且经测试速度快一半以上 
    194.     */  
    195.     public void RowFilter(String tableName, String reg) throws Exception {  
    196.         Table table = conn.getTable(TableName.valueOf(tableName));  
    197.         Scan scan = new Scan();  
    198.         //这个参数EQUAL很重要,如果参数不同,查询的结果也会不同  
    199. //      RowFilter filter = new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(reg)));//这样写也行  
    200. //      Filter filter = new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(reg)));  
    201.         Filter filter = new RowFilter(CompareOp.LESS_OR_EQUAL,  new BinaryComparator(Bytes.toBytes(reg)));  
    202.         scan.setFilter(filter);  
    203.         ResultScanner scanner = table.getScanner(scan);  
    204.         for (Result r : scanner) {  
    205.             for (Cell cell : r.rawCells()) {  
    206.                 System.out.println(  
    207.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    208.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    209.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    210.             }  
    211.         }  
    212.     /** 
    213.     * 更推荐用下面的方法直接指定起止行,因为filter本质上还是会遍历全部数据,而设定起止行后会直接从指定行开始,指定行结束,效率高很多。 
    214.     */  
    215.     // scan.setStartRow(Bytes.toBytes("AAAAAAAAAAAA"));  
    216.     // scan.setStopRow(Bytes.toBytes( "AAAAAAAAABBB"));  
    217.     }  
    218. /* 
    219. hbase(main):004:0> scan 'scores', {FILTER => "RowFilter(<=,'binary:zhangsan01')"} 
    220. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    221.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    222.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    223.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    224.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    225.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    226.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    227. 2 row(s) in 0.0210 seconds 
    228. */  
    229.       
    230.     /** 
    231.     4,PrefixFilter 
    232.         取回rowkey以指定prefix开头的所有行 
    233.     */  
    234.     public void PrefixFilter(String tableName, String reg) throws Exception {  
    235.         Table table = conn.getTable(TableName.valueOf(tableName));  
    236.         Scan scan = new Scan();  
    237.         Filter filter = new PrefixFilter(Bytes.toBytes("zhang"));  
    238.         scan.setFilter(filter);  
    239.         ResultScanner scanner = table.getScanner(scan);  
    240.         for (Result r : scanner) {  
    241.             for (Cell cell : r.rawCells()) {  
    242.                 System.out.println(  
    243.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    244.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    245.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    246.             }  
    247.         }  
    248.     }  
    249. /* 
    250. hbase(main):022:0> scan 'scores', {FILTER => org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('li'))} 
    251. 或者 
    252. hbase(main):004:0> scan 'scores', {FILTER => "PrefixFilter('li')"} 
    253. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    254.  lisi01                                                      column=course:art, timestamp=1489747672249, value=89                                                                                                                             
    255.  lisi01                                                      column=course:math, timestamp=1489747666861, value=89                                                                                                                            
    256.  lisi01                                                      column=grade:, timestamp=1489747677402, value=201                                                                                                                                
    257. 1 row(s) in 0.0110 seconds 
    258. */  
    259.       
    260.     /** 
    261.     由于其原生带有PrefixFilter这种对ROWKEY的前缀过滤查询,因此想着实现的后缀查询的过程中,发现这一方面相对来说还是空白。 
    262.     因此,只能采用一些策略来实现,主要还是采用正则表达式的方式。  
    263.     */  
    264.     public void HouZui(String tableName) throws Exception {  
    265.         Table table = conn.getTable(TableName.valueOf(tableName));  
    266.         Scan scan = new Scan();  
    267.         Filter filter = new RowFilter(CompareOp.EQUAL,new RegexStringComparator(".*n01"));  
    268.         scan.setFilter(filter);  
    269.         ResultScanner scanner = table.getScanner(scan);  
    270.         for (Result r : scanner) {  
    271.             for (Cell cell : r.rawCells()) {  
    272.                 System.out.println(  
    273.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    274.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    275.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    276.             }  
    277.         }  
    278.     }  
    279. /* 
    280. hbase(main):020:0> scan 'scores', {FILTER => "RowFilter(=,'regexstring:.*n01')"} 
    281. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    282.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    283.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    284.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    285. 1 row(s) in 0.0080 seconds 
    286. */  
    287.       
    288.     /** 
    289.     5,ColumnPrefixFilter 
    290.     */  
    291.     public void ColumnPrefixFilter(String tableName) throws Exception {  
    292.         Table table = conn.getTable(TableName.valueOf(tableName));  
    293.         Scan scan = new Scan();  
    294.         byte[] prefix = Bytes.toBytes("ar");  
    295.         Filter filter = new ColumnPrefixFilter(prefix);  
    296.         scan.setFilter(filter);  
    297.         ResultScanner scanner = table.getScanner(scan);  
    298.         for (Result r : scanner) {  
    299.             for (Cell cell : r.rawCells()) {  
    300.                 System.out.println(  
    301.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    302.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    303.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    304.             }  
    305.         }  
    306.     }  
    307. /* 
    308. hbase(main):021:0> scan 'scores', {FILTER => "ColumnPrefixFilter('ar')"} 
    309. 或者 
    310. hbase(main):022:0> scan 'scores', {FILTER => org.apache.hadoop.hbase.filter.ColumnPrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('ar'))} 
    311. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    312.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    313.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    314.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    315. 3 row(s) in 0.0140 seconds 
    316. */  
    317.       
    318.     /** 
    319.     6,MultipleColumnPrefixFilter 
    320.             a,返回有此前缀的所有列, 
    321.             b,在byte[][]中定义所有需要的列前缀,只要满足其中一条约束就会被返回(ColumnPrefixFilter的加强版), 
    322.     */  
    323.     public void MultipleColumnPrefixFilter(String tableName) throws Exception {  
    324.         Table table = conn.getTable(TableName.valueOf(tableName));  
    325.         Scan scan = new Scan();  
    326.         byte[][] prefix = {Bytes.toBytes("ar"),Bytes.toBytes("ma")};  
    327.         Filter filter = new MultipleColumnPrefixFilter(prefix);  
    328.         scan.setFilter(filter);  
    329.         ResultScanner scanner = table.getScanner(scan);  
    330.         for (Result r : scanner) {  
    331.             for (Cell cell : r.rawCells()) {  
    332.                 System.out.println(  
    333.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    334.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    335.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    336.             }  
    337.         }  
    338.     }  
    339. /* 
    340. hbase(main):023:0> scan 'scores', {FILTER => "MultipleColumnPrefixFilter('ar','ma')"} 
    341. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    342.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    343.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    344.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    345.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    346.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    347.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    348. 3 row(s) in 0.0290 seconds 
    349. */  
    350.       
    351.     /** 
    352.     7,ColumnCountGetFilter 
    353.           a,无法再scan中使用,只能在Get中 
    354.           b,若设为0,则无法返回数据,设为几就按服务器中存储位置取回几列 
    355.           c,可用size()取到列数,观察效果 
    356.     */  
    357.     public void columnCountGetFilter() throws Exception {  
    358.         Table table = conn.getTable(TableName.valueOf("scores"));  
    359.         Get get = new Get(Bytes.toBytes("zhangsan01"));    
    360.         get.setFilter(new ColumnCountGetFilter(2));  
    361.         Result result = table.get(get);    
    362.         //输出结果size,观察效果  
    363.         System.out.println(result.size());  
    364. //        byte[] value1 = result.getValue("course".getBytes(), "art".getBytes());    
    365. //        byte[] value2 = result.getValue("course".getBytes(), "math".getBytes());    
    366. //        System.out.println("course:art"+"-->"+new String(value1)+"  "    
    367. //                +"course:math"+"-->"+new String(value2));  
    368.     }  
    369. /* 
    370. hbase(main):026:0> scan 'scores', {FILTER => "ColumnCountGetFilter(2)"} 
    371. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    372.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    373.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    374.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    375.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    376.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    377.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    378. 3 row(s) in 0.0120 seconds 
    379. */  
    380.       
    381.     /** 
    382.     8,ColumnPaginationFilter 
    383.           a,limit 表示返回列数 
    384.           b,offset 表示返回列的偏移量,如果为0,则全部取出,如果为1,则返回第二列及以后 
    385.     */  
    386.     public void ColumnPaginationFilter(String tableName) throws Exception {  
    387.         Table table = conn.getTable(TableName.valueOf(tableName));  
    388.         Scan scan = new Scan();  
    389.         Filter filter = new ColumnPaginationFilter(2,1);  
    390.         scan.setFilter(filter);  
    391. //      用addFamily增加列族后,会只返回指定列族的数据  
    392.         scan.addFamily(Bytes.toBytes("course"));  
    393.         ResultScanner scanner = table.getScanner(scan);  
    394.         for (Result r : scanner) {  
    395.             for (Cell cell : r.rawCells()) {  
    396.                 System.out.println(  
    397.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    398.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    399.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    400.             }  
    401.         }  
    402.     }  
    403. /* 
    404. hbase(main):031:0> scan 'scores',{FILTER=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(2,1)} 
    405. 或者 
    406. hbase(main):030:0> scan 'scores',{FILTER=> "ColumnPaginationFilter(2,1)"} 
    407. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    408.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    409.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    410.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    411.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    412.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    413.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    414. 3 row(s) in 0.0100 seconds 
    415. */  
    416.       
    417.     /** 
    418.     9,ColumnRangeFilter 
    419.     构造函数: 
    420.     ColumnRangeFilter(byte[] minColumn, boolean minColumnInclusive, byte[] maxColumn, boolean maxColumnInclusive) 
    421.     *可用于获得一个范围的列,例如,如果你的一行中有百万个列,但是你只希望查看列名为bbbb到dddd的范围 
    422.     *该过滤器可以进行高效的列名内部扫描。(为何是高效呢???因为列名是已经按字典排序好的)HBase-0.9.2 版本引入该功能。 
    423.     *一个列名是可以出现在多个列族中的,该过滤器将返回所有列族中匹配的列 
    424.     */  
    425.     public void ColumnRangeFilter(String tableName) throws Exception {  
    426.         Table table = conn.getTable(TableName.valueOf(tableName));  
    427.         Scan scan = new Scan();  
    428.         Filter filter = new ColumnRangeFilter(Bytes.toBytes("a"),true, Bytes.toBytes("n"),true);  
    429.         scan.setFilter(filter);  
    430.         ResultScanner scanner = table.getScanner(scan);  
    431.         for (Result r : scanner) {  
    432.             for (Cell cell : r.rawCells()) {  
    433.                 System.out.println(  
    434.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    435.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    436.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    437.             }  
    438.         }  
    439.     }  
    440. /* 
    441. hbase(main):032:0> scan 'scores',{FILTER=> "ColumnRangeFilter('a',true,'n',true)"} 
    442. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    443.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    444.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    445.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    446.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    447.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    448.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    449. 3 row(s) in 0.0140 seconds 
    450. */  
    451.       
    452.     /** 
    453.     10, DependentColumnFilter (该过滤器有两个参数:family和Qualifier,尝试找到该列所在的每一行, 
    454.         并返回该行具有相同时间戳的全部键值对。如果某一行不包含指定的列,则该行的任何键值对都不返回, 
    455.         该过滤器还可以有一个可选的布尔参数-如果为true,从属的列不返回; 
    456.         该过滤器还可以有两个可选的参数--一个比较操作符和一个值比较器,用于family和Qualifier 
    457.         的进一步检查,如果从属的列找到,其值还必须通过值检查,然后就是时间戳必须考虑) 
    458.     */  
    459.     public void DependentColumnFilter(String tableName) throws Exception {  
    460.         Table table = conn.getTable(TableName.valueOf(tableName));  
    461.         Scan scan = new Scan();  
    462. //      Filter filter = new DependentColumnFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),false);  
    463. //      Filter filter = new DependentColumnFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),true);  
    464.         Filter filter = new DependentColumnFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),false,CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("90")));  
    465. //      Filter filter = new DependentColumnFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),true,CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("90")));  
    466.         //上面这四种情况输出的for循环中的内容也不一样,要做相应的修改,否则会报java.lang.NullPointerException  
    467.         scan.setFilter(filter);  
    468.         ResultScanner scanner = table.getScanner(scan);  
    469.         for (Result r : scanner) {  
    470.             for (Cell cell : r.rawCells()) {  
    471.                 System.out.println(  
    472.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    473.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    474.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    475.             }  
    476.         }  
    477.     }  
    478. /* 
    479. hbase(main):036:0> scan 'scores',{FILTER=> "DependentColumnFilter('course','art',false,=,'binary:90')"} 
    480. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    481.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    482.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    483.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    484.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    485. 2 row(s) in 0.0160 seconds 
    486. */  
    487.       
    488.     /** 
    489.     11,FirstKeyOnlyFilter 
    490.           如名字所示,结果只返回每行的第一个值对 
    491.     */  
    492.     public void FirstKeyOnlyFilter(String tableName) throws Exception {  
    493.         Table table = conn.getTable(TableName.valueOf(tableName));  
    494.         Scan scan = new Scan();  
    495.         Filter filter = new FirstKeyOnlyFilter();  
    496.         scan.setFilter(filter);  
    497.         ResultScanner scanner = table.getScanner(scan);  
    498.         for (Result r : scanner) {  
    499.             for (Cell cell : r.rawCells()) {  
    500.                 System.out.println(  
    501.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    502.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    503.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    504.             }  
    505.         }  
    506.     }  
    507. /* 
    508. hbase(main):037:0> scan 'scores',{FILTER=> "FirstKeyOnlyFilter()"} 
    509. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    510.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    511.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    512.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    513. 3 row(s) in 0.0160 seconds 
    514. */  
    515.       
    516.     /** 
    517.     12,FuzzyRowFilter 
    518.             模糊row查询 
    519.         pair中第一个参数为模糊查询的string 
    520.             第二个参数为byte[]其中装与string位数相同的数值0或1,0表示该位必须与string中值相同,1表示可以不同          
    521.     */  
    522.     public void FuzzyRowFilter(String tableName) throws Exception {  
    523.         Table table = conn.getTable(TableName.valueOf(tableName));  
    524.         Scan scan = new Scan();  
    525.         Filter filter = new FuzzyRowFilter( Arrays.asList(new Pair<byte[], byte[]>(Bytes.toBytes("zhangsan01"),  
    526.                         new byte[] {0, 0, 0, 0 , 0, 0, 0, 0, 0, 1})));  
    527.         scan.setFilter(filter);  
    528.         ResultScanner scanner = table.getScanner(scan);  
    529.         for (Result r : scanner) {  
    530.             for (Cell cell : r.rawCells()) {  
    531.                 System.out.println(  
    532.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    533.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    534.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    535.             }  
    536.         }  
    537.     }  
    538. /* 
    539. 。。。。。 
    540. */  
    541.       
    542.     /** 
    543.     13,InclusiveStopFilter 
    544.         指定stopRow,程序在scan时从头扫描全部返回,直到stopRow停止(stopRow这行也会返回,然后scan停止)  
    545.     */  
    546.     public void InclusiveStopFilter(String tableName) throws Exception {  
    547.         Table table = conn.getTable(TableName.valueOf(tableName));  
    548.         Scan scan = new Scan();  
    549.         Filter filter = new InclusiveStopFilter(Bytes.toBytes("zhangsan01"));  
    550.         scan.setFilter(filter);  
    551.         ResultScanner scanner = table.getScanner(scan);  
    552.         for (Result r : scanner) {  
    553.             for (Cell cell : r.rawCells()) {  
    554.                 System.out.println(  
    555.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    556.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    557.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    558.             }  
    559.         }  
    560.     }  
    561. /* 
    562. hbase(main):012:0> scan 'scores', {FILTER => "InclusiveStopFilter('zhangsan01')"} 
    563. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    564.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    565.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    566.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    567.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    568.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    569.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    570. 2 row(s) in 0.0170 seconds 
    571. */  
    572.       
    573.     /** 
    574.     14,KeyOnlyFilter 
    575.        只取key值,size正常,说明value不是没取而是在取的时候被重写为空(能打印,不是null) 
    576.      lenAsVal这个值没大搞明白,当设为false时打印为空,如果设为true时打印的将会是“口口口口” 
    577.     */  
    578.     public void KeyOnlyFilter(String tableName) throws Exception {  
    579.         Table table = conn.getTable(TableName.valueOf(tableName));  
    580.         Scan scan = new Scan();  
    581.         Filter filter = new KeyOnlyFilter(true);  
    582.         scan.setFilter(filter);  
    583.         ResultScanner scanner = table.getScanner(scan);  
    584.         for (Result r : scanner) {  
    585.             for (Cell cell : r.rawCells()) {  
    586.                 System.out.println(  
    587.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    588.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    589.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    590.             }  
    591.         }  
    592.     }  
    593. /* 
    594. hbase(main):016:0> scan 'scores', {FILTER => "KeyOnlyFilter(true)"} 
    595. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    596.  lisi01                                                      column=course:art, timestamp=1498003655021, value=x00x00x00x02                                                                                                               
    597.  lisi01                                                      column=course:math, timestamp=1498003561726, value=x00x00x00x02                                                                                                              
    598.  lisi01                                                      column=grade:, timestamp=1498003561726, value=x00x00x00x03                                                                                                                   
    599.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=x00x00x00x02                                                                                                               
    600.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=x00x00x00x02                                                                                                              
    601.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=x00x00x00x03                                                                                                                   
    602.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=x00x00x00x02                                                                                                               
    603.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=x00x00x00x02                                                                                                              
    604.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=x00x00x00x03                                                                                                                   
    605. 3 row(s) in 0.0320 seconds 
    606. hbase(main):015:0> scan 'scores', {FILTER => "KeyOnlyFilter(false)"} 
    607. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    608.  lisi01                                                      column=course:art, timestamp=1498003655021, value=                                                                                                                               
    609.  lisi01                                                      column=course:math, timestamp=1498003561726, value=                                                                                                                              
    610.  lisi01                                                      column=grade:, timestamp=1498003561726, value=                                                                                                                                   
    611.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=                                                                                                                               
    612.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=                                                                                                                              
    613.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=                                                                                                                                   
    614.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=                                                                                                                               
    615.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=                                                                                                                              
    616.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=                                                                                                                                   
    617. 3 row(s) in 0.0190 seconds 
    618. */  
    619.       
    620.     /** 
    621.     15,PageFilter 
    622.         取回XX条数据   
    623.     */  
    624.     public void PageFilter(String tableName) throws Exception {  
    625.         Table table = conn.getTable(TableName.valueOf(tableName));  
    626.         Scan scan = new Scan();  
    627.         Filter filter = new PageFilter(2);  
    628.         scan.setFilter(filter);  
    629.         ResultScanner scanner = table.getScanner(scan);  
    630.         for (Result r : scanner) {  
    631.             for (Cell cell : r.rawCells()) {  
    632.                 System.out.println(  
    633.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    634.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    635.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    636.             }  
    637.         }  
    638.     }  
    639. /* 
    640. hbase(main):017:0> scan 'scores', {FILTER => "PageFilter(2)"} 
    641. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    642.  lisi01                                                      column=course:art, timestamp=1498003655021, value=89                                                                                                                             
    643.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    644.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    645.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    646.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    647.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    648. 2 row(s) in 0.0130 seconds 
    649. */  
    650.       
    651.     /** 
    652.     16,RandomRowFilter 
    653.         参数小于0时一条查不出大于1值会返回所有,而想取随机行的话有效区间为0~1,值代表取到的几率 
    654.     */  
    655.     public void RandomRowFilter(String tableName) throws Exception {  
    656.         Table table = conn.getTable(TableName.valueOf(tableName));  
    657.         Scan scan = new Scan();  
    658.         Filter filter = new RandomRowFilter((float)0.5);  
    659.         //即使是0.5有时候也一条查不出来,有时候却全出来了,是几率并不是一定,那我就不知道这个具体有什么实际运用了。。。根据rowkey随机而不是根据列随机  
    660.         scan.setFilter(filter);  
    661.         ResultScanner scanner = table.getScanner(scan);  
    662.         for (Result r : scanner) {  
    663.             for (Cell cell : r.rawCells()) {  
    664.                 System.out.println(  
    665.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    666.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    667.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    668.             }  
    669.         }  
    670.     }  
    671. /* 
    672. 。。。。。 
    673. */  
    674.       
    675.     /** 
    676.     17,SingleColumnValueFilter和SingleColumnValueExcludeFilter 
    677.         用来查找并返回指定条件的列的数据 
    678.             a,如果查找时没有该列,两种filter都会把该行所有数据返回 
    679.             b,如果查找时有该列,但是不符合条件,则该行所有列都不返回 
    680.             c,如果找到该列,并且符合条件,前者返回所有列,后者返回除该列以外的所有列 
    681.      */  
    682.     public void SingleColumnValueFilter(String tableName) throws Exception {  
    683.         Table table = conn.getTable(TableName.valueOf(tableName));  
    684.         Scan scan = new Scan();  
    685.         //完整匹配字节数组  
    686. //      Filter filter = new SingleColumnValueFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("90")));  
    687.         //匹配正则表达式  
    688. //      Filter filter = new SingleColumnValueFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),CompareOp.EQUAL,new RegexStringComparator("8"));  
    689.         //匹配是否包含子串,大小写不敏感  
    690. //      Filter filter = new SingleColumnValueFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),CompareOp.EQUAL,new SubstringComparator("9"));  
    691.         Filter filter = new SingleColumnValueExcludeFilter(Bytes.toBytes("course"), Bytes.toBytes("art"), CompareOp.EQUAL,new SubstringComparator("9"));  
    692.         scan.setFilter(filter);  
    693.         ResultScanner scanner = table.getScanner(scan);  
    694.         for (Result r : scanner) {  
    695.             for (Cell cell : r.rawCells()) {  
    696.                 System.out.println(  
    697.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    698.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    699.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    700.             }  
    701.         }  
    702.     }  
    703. /* 
    704. hbase(main):032:0> scan 'scores', {FILTER => "SingleColumnValueExcludeFilter('course','art',=,'substring:9')"} 
    705. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    706.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    707.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    708.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    709.  zhangsan01                                                  column=grade:, timestamp=1498003593575, value=101                                                                                                                                
    710.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    711.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    712. 3 row(s) in 0.0150 seconds 
    713. */  
    714.       
    715.     /** 
    716.     18,ValueFilter 
    717.     按value全数据库搜索(全部列的value均会被检索) 
    718.     */  
    719.     public void ValueFilter(String tableName) throws Exception {  
    720.         Table table = conn.getTable(TableName.valueOf(tableName));  
    721.         Scan scan = new Scan();  
    722.         Filter filter = new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("102")));  
    723.         scan.setFilter(filter);  
    724.         ResultScanner scanner = table.getScanner(scan);  
    725.         for (Result r : scanner) {  
    726.             for (Cell cell : r.rawCells()) {  
    727.                 System.out.println(  
    728.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    729.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    730.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    731.             }  
    732.         }  
    733.     }  
    734. /* 
    735. NOT_EQUAL不知道该咋么表示。。。。。 
    736. */  
    737.       
    738.     /** 
    739.     19,SkipFilter 
    740.         根据整行中的每个列来做过滤,只要存在一列不满足条件,整行都被过滤掉。 
    741.         例如,如果一行中的所有列代表的是不同物品的重量,则真实场景下这些数值都必须大于零,我们希望将那些包含任意列值为0的行都过滤掉。 
    742.         在这个情况下,我们结合ValueFilter和SkipFilter共同实现该目的: 
    743.         scan.setFilter(new SkipFilter(new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes(0)))); 
    744.     */  
    745.     public void SkipFilter(String tableName) throws Exception {  
    746.         Table table = conn.getTable(TableName.valueOf(tableName));  
    747.         Scan scan = new Scan();  
    748.         Filter filter = new SkipFilter(new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("102"))));  
    749. //      Filter filter = new SkipFilter(new DependentColumnFilter(Bytes.toBytes("course"), Bytes.toBytes("art"),false,CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("90"))));  
    750.         //该过滤器需要配合其他过滤器来使用  
    751.         scan.setFilter(filter);  
    752.         ResultScanner scanner = table.getScanner(scan);  
    753.         for (Result r : scanner) {  
    754.             for (Cell cell : r.rawCells()) {  
    755.                 System.out.println(  
    756.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    757.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    758.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    759.             }  
    760.         }  
    761.     }  
    762. /* 
    763. 不知道咋么把两个过滤器嵌套使用。。。。。 
    764. */  
    765.       
    766.     /** 
    767.     20,TimestampsFilter 
    768.         a,按时间戳搜索数据库 
    769.         b,需设定List<Long> 存放所有需要检索的时间戳, 
    770.     */  
    771.     public void TimestampsFilter(String tableName) throws Exception {  
    772.         Table table = conn.getTable(TableName.valueOf(tableName));  
    773.         Scan scan = new Scan();  
    774.         //ls中存放所有需要查找匹配的时间戳  
    775.         List<Long> ls = new ArrayList<Long>();  
    776.         ls.add((long)1498003561726L);  
    777.         ls.add((long)1498003601365L);  
    778.         //java语言的整型常量默认为int型,声明long型常量可以后加”l“或”L“  
    779.         Filter filter = new TimestampsFilter(ls);  
    780.         scan.setFilter(filter);  
    781.         ResultScanner scanner = table.getScanner(scan);  
    782. //      for (Result result : scanner) {  
    783. //          if(new String(result.getRow()).equals("zhangsan01")){  
    784. //              System.out.println(new String(result.getRow())+"  "  
    785. //                  +"course:art"+"-->"+new String(result.getValue(Bytes.toBytes("course"), Bytes.toBytes("art")))+"  "  
    786. //                  +"course:math"+"-->"+new String(result.getValue(Bytes.toBytes("course"), Bytes.toBytes("math"))));  
    787. //          }else if(new String(result.getRow()).equals("zhangsan02")){  
    788. //              System.out.println(new String(result.getRow())+"  "  
    789. //                  +"course:art"+"-->"+new String(result.getValue(Bytes.toBytes("course"), Bytes.toBytes("art")))+"  "  
    790. //                  +"course:math"+"-->"+new String(result.getValue(Bytes.toBytes("course"), Bytes.toBytes("math")))+"  "  
    791. //                  +"grade:"+"-->"+new String(result.getValue(Bytes.toBytes("grade"), Bytes.toBytes(""))));  
    792. //          }else{  
    793. //              System.out.println(new String(result.getRow())+"  "  
    794. //                  +"course:math"+"-->"+new String(result.getValue(Bytes.toBytes("course"), Bytes.toBytes("math")))+"  "  
    795. //                  +"grade:"+"-->"+new String(result.getValue(Bytes.toBytes("grade"), Bytes.toBytes(""))));  
    796. //          }  
    797. //      }  
    798.         for (Result r : scanner) {  
    799.             for (Cell cell : r.rawCells()) {  
    800.                 System.out.println(  
    801.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    802.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    803.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    804.             }  
    805.         }  
    806.     }  
    807. /* 
    808. hbase(main):039:0> scan 'scores', {FILTER => "TimestampsFilter(1498003561726,1498003601365)"} 
    809. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    810.  lisi01                                                      column=course:math, timestamp=1498003561726, value=89                                                                                                                            
    811.  lisi01                                                      column=grade:, timestamp=1498003561726, value=201                                                                                                                                
    812.  zhangsan01                                                  column=course:art, timestamp=1498003561726, value=90                                                                                                                             
    813.  zhangsan01                                                  column=course:math, timestamp=1498003561726, value=99                                                                                                                            
    814.  zhangsan02                                                  column=course:art, timestamp=1498003601365, value=90                                                                                                                             
    815.  zhangsan02                                                  column=course:math, timestamp=1498003561726, value=66                                                                                                                            
    816.  zhangsan02                                                  column=grade:, timestamp=1498003601365, value=102                                                                                                                                
    817. 3 row(s) in 0.0160 seconds 
    818. */  
    819.       
    820.     /** 
    821.     21,WhileMatchFilter 
    822.         相当于while执行,直到不match就break了返回了。 
    823.     */  
    824.     public void WhileMatchFilter(String tableName) throws Exception {  
    825.         Table table = conn.getTable(TableName.valueOf(tableName));  
    826.         Scan scan = new Scan();  
    827.         Filter filter = new WhileMatchFilter(new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("101"))));  
    828.         scan.setFilter(filter);  
    829.         ResultScanner scanner = table.getScanner(scan);  
    830.         for (Result r : scanner) {  
    831.             for (Cell cell : r.rawCells()) {  
    832.                 System.out.println(  
    833.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    834.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    835.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    836.             }  
    837.         }  
    838.     }  
    839. /* 
    840. 。。。。。 
    841. */  
    842.       
    843.     /** 
    844.     22,FilterList  
    845.         代表一个过滤器链,它可以包含一组即将应用于目标数据集的过滤器,过滤器间具有“与”FilterList.Operator.MUST_PASS_ALL和“或”FilterList.Operator.MUST_PASS_ONE关系。 
    846.         官网实例代码,两个“或”关系的过滤器的写法: 
    847.     */  
    848.     public void FilterList(String tableName) throws Exception {  
    849.         Table table = conn.getTable(TableName.valueOf(tableName));  
    850.         FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);   //数据只要满足一组过滤器中的一个就可以  
    851.         SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("course"), Bytes.toBytes("math"),CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("89")));  
    852.         list.addFilter(filter1);      
    853.         SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("course"), Bytes.toBytes("math"),CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("66")));  
    854.         list.addFilter(filter2);  
    855.         Scan scan = new Scan();  
    856.         scan.setFilter(list);  
    857.         ResultScanner scanner = table.getScanner(scan);  
    858.         for (Result r : scanner) {  
    859.             for (Cell cell : r.rawCells()) {  
    860.                 System.out.println(  
    861.                         "Rowkey-->"+Bytes.toString(r.getRow())+"  "+  
    862.                         "Familiy:Quilifier-->"+Bytes.toString(CellUtil.cloneQualifier(cell))+"  "+  
    863.                         "Value-->"+Bytes.toString(CellUtil.cloneValue(cell)));  
    864.             }  
    865.         }  
    866.     }  
    867. /* 
    868. hbase(main):009:0> scan 'scores', {FILTER => "PrefixFilter('zhang') OR QualifierFilter(>=,'binary:b')"} 
    869. ROW                                                          COLUMN+CELL                                                                                                                                                                      
    870.  lisi01                                                      column=course:math, timestamp=1489747666861, value=89                                                                                                                            
    871.  lisi01                                                      column=grade:, timestamp=1489747677402, value=201                                                                                                                                
    872.  zhangsan01                                                  column=course:art, timestamp=1489747593360, value=90                                                                                                                             
    873.  zhangsan01                                                  column=course:math, timestamp=1489747589255, value=99                                                                                                                            
    874.  zhangsan01                                                  column=grade:, timestamp=1489747598001, value=101                                                                                                                                
    875.  zhangsan02                                                  column=course:art, timestamp=1489747607561, value=60                                                                                                                             
    876.  zhangsan02                                                  column=course:math, timestamp=1489747602883, value=66                                                                                                                            
    877.  zhangsan02                                                  column=grade:, timestamp=1489747614601, value=102                                                                                                                                
    878. 3 row(s) in 0.0180 seconds 
    879. */  
    880. }  

    上面有几个过滤器在hbase shell中没有找出,如果大家有找到的告诉我一声,一起进步。

    参考:
    http://blog.csdn.net/blue__yeah/article/details/41040399
    http://blog.csdn.net/liangtingac/article/details/40078637
    http://blog.csdn.net/u010967382/article/details/37653177
    http://blog.csdn.net/sparkexpert/article/details/51942354

    from:https://blog.csdn.net/m0_37739193/article/details/73615016

  • 相关阅读:
    Docker+geoserver发布shp地图服务
    Docker中运行命令时提示:Cannot connect to the Docker daemony...以及设置docker开机启动
    Docker在服务器之间怎样导入导出镜像(服务器之间容器复制)
    Docker+Tomcat+geoserver+shp发布地图服务
    Windows中将文件压缩成linux支持的tar.gz格式的压缩包
    Docker怎样提交镜像(把容器打成镜像)
    Docker中宿主机与容器之间互传文件(docker cp的方式)
    移动零
    旋转数组
    有序数组的平方
  • 原文地址:https://www.cnblogs.com/zhangzl/p/8961292.html
Copyright © 2020-2023  润新知