HBase Client API使用(二)---查询及过滤器

相关知识


 

 

创建表插入数据删除等见:http://www.cnblogs.com/wishyouhappy/p/3735077.html

HBase API简介见:http://www.cnblogs.com/wishyouhappy/p/3753347.html

 

按行、列簇等查询


 

 

package wish.hbase;



import java.io.IOException;

import java.util.ArrayList;

import java.util.List;



import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.KeyValue;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.HTablePool;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;

import org.apache.hadoop.hbase.filter.FilterList;

import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;

import org.apache.hadoop.hbase.util.Bytes;



public class HBaseQuerydata

{

    static Configuration cfg = HBaseConfiguration.create();

    static {

        

        cfg.set("hbase.zookeeper.quorum", "192.168.1.95");

        cfg.set("hbase.zookeeper.property.clientPort", "2181");

    }



    public static void queryByRowKey(String tablename, String rowKey) throws IOException

    {

        HTable table = new HTable(cfg, tablename);

        Get g = new Get(rowKey.getBytes());

        Result rs = table.get(g);



        for (KeyValue kv : rs.raw())

        {

            System.out.println("rowkey:        " + new String(kv.getRow()));

            System.out.println("Column Family: " + new String(kv.getFamily()));

            System.out.println("Column       : " + new String(kv.getQualifier()));

            System.out.println("value        : " + new String(kv.getValue()));

        }

    }



    public static void queryByRowKeyFamily(String tablename, String rowKey, String family) throws IOException

    {

        HTable table = new HTable(cfg, tablename);

        Get g = new Get(rowKey.getBytes());

        g.addFamily(Bytes.toBytes(family));

        Result rs = table.get(g);

        for (KeyValue kv : rs.raw())

        {

            System.out.println("rowkey:        " + new String(kv.getRow()));

            System.out.println("Column Family: " + new String(kv.getFamily()));

            System.out.println("Column       : " + new String(kv.getQualifier()));

            System.out.println("value        : " + new String(kv.getValue()));

        }

    }



    public static void queryByRowKeyFamilyColumn(String tablename, String rowKey, String family, String column)

            throws IOException

    {

        HTable table = new HTable(cfg, tablename);

        Get g = new Get(rowKey.getBytes());

        g.addColumn(family.getBytes(), column.getBytes());



        Result rs = table.get(g);



        for (KeyValue kv : rs.raw())

        {

            System.out.println("rowkey:        " + new String(kv.getRow()));

            System.out.println("Column Family: " + new String(kv.getFamily()));

            System.out.println("Column       : " + new String(kv.getQualifier()));

            System.out.println("value        : " + new String(kv.getValue()));

        }

    }



    



    /*

     * 查询所有

     */

    public static void queryAll(String tableName) { 

        HTablePool pool = new HTablePool(cfg, 1000); 

        try { 

            ResultScanner rs = pool.getTable(tableName).getScanner(new Scan()); 

            for (Result r : rs) { 

                System.out.println("rowkey:" + new String(r.getRow())); 

                for (KeyValue keyValue : r.raw()) { 

                    System.out.println("列:" + new String(keyValue.getFamily()) 

                            + "     值:" + new String(keyValue.getValue())); 

                } 

            } 

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

    } 



    public static void main(String[] args) throws Exception

    {

      System.out.println("******************************queryall******************************");

        queryAll("wishtest1");System.out.println("******************************query by rowkey******************************");

        queryByRowKey("wishTest1", "2");

        System.out.println("******************************query by rowkey family******************************");

        queryByRowKeyFamily("wishTest1", "2","name");

        System.out.println("******************************query by rowkey family column******************************");

        queryByRowKeyFamilyColumn("wishTest1", "6","score","Chinese");

    }

}

 

输出如下:

******************************queryall******************************

rowkey:****1121

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:*1111

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:1

列:age     值:20

列:gender     值:male

列:name     值:rain

rowkey:2

列:age     值:20

列:gender     值:female

列:name     值:wish

rowkey:3

列:age     值:20

列:gender     值:male

列:name     值:Joey

rowkey:4

列:age     值:20

列:gender     值:male

列:name     值:Jenny

列:score     值:90

列:score     值:100

列:score     值:100

列:score     值:90

rowkey:5

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:6

列:age     值:20

列:gender     值:male

列:name     值:Joey

列:score     值:100

列:score     值:100

列:score     值:90

******************************query by rowkey******************************

rowkey:        2

Column Family: age

Column       : 

value        : 20

rowkey:        2

Column Family: gender

Column       : 

value        : female

rowkey:        2

Column Family: name

Column       : 

value        : wish

******************************query by rowkey family******************************

rowkey:        2

Column Family: name

Column       : 

value        : wish

******************************query by rowkey family column******************************

rowkey:        6

Column Family: score

Column       : Chinese

value        : 100

 

行过滤器


 

 

使用过滤器可以提高操作表的效率,HBase中两种数据读取函数get()和scan()都支持过滤器

可以使用预定义好的过滤器或者是实现自定义过滤器

过滤器在客户端创建,通过RPC传送到服务器端,在服务器端执行过滤操作

 

行过滤器简单例子如下:

测试table中所有数据如下:

rowkey:****1121

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:*1111

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:1

列:age     值:20

列:gender     值:male

列:name     值:rain

rowkey:2

列:age     值:20

列:gender     值:female

列:name     值:wish

rowkey:3

列:age     值:20

列:gender     值:male

列:name     值:Joey

rowkey:4

列:age     值:20

列:gender     值:male

列:name     值:Jenny

列:score     值:90

列:score     值:100

列:score     值:100

列:score     值:90

rowkey:5

列:age     值:20

列:gender     值:male

列:name     值:Chander

列:score     值:120

列:score     值:100

列:score     值:99

rowkey:6

列:age     值:20

列:gender     值:male

列:name     值:Joey

列:score     值:100

列:score     值:100

列:score     值:90

 

eg1:

public static void rowFilterLESS_OR_EQUAL(String tableName, String columnFamily, String column, String condition){

        System.out.println("***********************start rowFilterLESS_OR_EQUAL***************************");

        Scan scan = new Scan();

        scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));

        

        Filter f = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(condition)));

        scan.setFilter(f);

        HTablePool pool = new HTablePool(cfg, 1000); 

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

                for (; rs != null; rs = resultScanner.next())

                {

                    for (KeyValue kv : rs.list())

                    {

                        System.out.println("-------------------------------");

                        System.out.println("rowkey:        " + new String(kv.getRow()));

                        System.out.println("Column Family: " + new String(kv.getFamily()));

                        System.out.println("Column       :" + new String(kv.getQualifier()));

                        System.out.println("value        : " + new String(kv.getValue()));

                    }

                }

            

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        System.out.println("***********************end rowFilterLESS_OR_EQUAL***************************");



    }
public static void main(String[] args) {

        String tableName = "wishTest1";

        HBaseFilter.rowFilterLESS_OR_EQUAL(tableName, "score", "Math", "4");

    }

 

输出:

***********************start rowFilterLESS_OR_EQUAL***************************



-------------------------------

rowkey:        ****1121

Column Family: score

Column       :Math

value        : 99

-------------------------------

rowkey:        *1111

Column Family: score

Column       :Math

value        : 99

-------------------------------

rowkey:        4

Column Family: score

Column       :Math

value        : 90

-------------------------------

rowkey:        5

Column Family: score

Column       :Math

value        : 99

***********************end rowFilterLESS_OR_EQUAL***************************

 

eg2:

    /*

     * rowFilterRegex

     */

    public static void rowFilterRegex(String tableName, String columnFamily, String column, String condition){

        System.out.println("***********************start rowFilterRegex***************************");

        Scan scan = new Scan();

        scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));

        

        Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*."));

        scan.setFilter(f);

        HTablePool pool = new HTablePool(cfg, 1000); 

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

                for (; rs != null; rs = resultScanner.next())

                {

                    for (KeyValue kv : rs.list())

                    {

                        System.out.println("-------------------------------");

                        System.out.println("rowkey:        " + new String(kv.getRow()));

                        System.out.println("Column Family: " + new String(kv.getFamily()));

                        System.out.println("Column       :" + new String(kv.getQualifier()));

                        System.out.println("value        : " + new String(kv.getValue()));

                    }

                }

            

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        System.out.println("***********************end rowFilterRegex***************************");



    }
public static void main(String[] args) {

        String tableName = "wishTest1";

        HBaseFilter.rowFilterRegex(tableName, "score", "Math", "\\*");

    }

输出:

***********************start rowFilterRegex***************************

-------------------------------

rowkey:        ****1121

Column Family: score

Column       :Math

value        : 99

-------------------------------

rowkey:        *1111

Column Family: score

Column       :Math

value        : 99

***********************end rowFilterRegex***************************

 

eg3:

/*

     * rowFilterSubstring

     */

    public static void rowFilterSubstring(String tableName, String columnFamily, String column, String condition){

        System.out.println("***********************start rowFilterSubstring***************************");

        Scan scan = new Scan();

        scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));

        

        Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*"));

        scan.setFilter(f);

        HTablePool pool = new HTablePool(cfg, 1000); 

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

            for (; rs != null; rs = resultScanner.next())

            {

                for (KeyValue kv : rs.list())

                {

                    System.out.println("-------------------------------");

                    System.out.println("rowkey:        " + new String(kv.getRow()));

                    System.out.println("Column Family: " + new String(kv.getFamily()));

                    System.out.println("Column       :" + new String(kv.getQualifier()));

                    System.out.println("value        : " + new String(kv.getValue()));

                }

            }

            

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        System.out.println("***********************end rowFilterSubstring***************************");

        

    }
    public static void main(String[] args) {

        String tableName = "wishTest1";

        HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");

    }

输出同上

 

 列簇过滤器


 

 

public static void familyFilterLess(String tableName, String condition){

        Filter filter = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));

        Scan scan = new Scan();

        scan.setFilter(filter);

        HTablePool pool = new HTablePool(cfg,100);

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

            for (; rs != null; rs = resultScanner.next())

            {

                for (KeyValue kv : rs.list())

                {

                    System.out.println("-------------------------------");

                    System.out.println("rowkey:        " + new String(kv.getRow()));

                    System.out.println("Column Family: " + new String(kv.getFamily()));

                    System.out.println("Column       :" + new String(kv.getQualifier()));

                    System.out.println("value        : " + new String(kv.getValue()));

                }

            }

            

            resultScanner.close();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }        

    }

    

    

    public static void main(String[] args) {

        String tableName = "wishTest1";

        HBaseFilter.familyFilterLess(tableName, "gender");

        //HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");

    }

 

输出:

-------------------------------

rowkey:        ****1121

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        *1111

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        1

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        2

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        3

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        4

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        5

Column Family: age

Column       :

value        : 20

-------------------------------

rowkey:        6

Column Family: age

Column       :

value        : 20

 

 

列名过滤器


 

 

    /*

     * 列名过滤器

     */

    

    public static void qualifierFilterLess(String tableName, String condition){

        Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));

        Scan scan = new Scan();

        scan.setFilter(filter);

        HTablePool pool = new HTablePool(cfg,100);

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

            for (; rs != null; rs = resultScanner.next())

            {

                for (KeyValue kv : rs.list())

                {

                    System.out.println("-------------------------------");

                    System.out.println("rowkey:        " + new String(kv.getRow()));

                    System.out.println("Column Family: " + new String(kv.getFamily()));

                    System.out.println("Column       :" + new String(kv.getQualifier()));

                    System.out.println("value        : " + new String(kv.getValue()));

                }

            }

            

            resultScanner.close();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }        

    }

    

 

 值过滤器


 

 

    /*

     * 值过滤器

     */

    

    public static void valueFilterLess(String tableName, String condition){

        Filter filter = new ValueFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));

        Scan scan = new Scan();

        scan.setFilter(filter);

        HTablePool pool = new HTablePool(cfg,100);

        try {

            ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);

            Result rs = resultScanner.next();

            for (; rs != null; rs = resultScanner.next())

            {

                for (KeyValue kv : rs.list())

                {

                    System.out.println("-------------------------------");

                    System.out.println("rowkey:        " + new String(kv.getRow()));

                    System.out.println("Column Family: " + new String(kv.getFamily()));

                    System.out.println("Column       :" + new String(kv.getQualifier()));

                    System.out.println("value        : " + new String(kv.getValue()));

                }

            }

            

            resultScanner.close();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }        

    }

 

 

你可能感兴趣的:(client)