HBaseのシェルとフィルタ操作のJava API


HBaseのシェルのフィルタ演算
1フィルタなし、フルテーブルスキャン
    スキャン「テーブル」//テーブル内のすべてのデータレコードをチェックアウト
    スキャン「upos_city_qh_yushu:tb_detail_userloc_outdoor_22180822」は、例えば
    次のようにクエリの結果は、(取得された1回線キーの内容):

 HBaseのシェルスクリプトの操作はとてもクエリ操作のために、非常に不便であり、かつ文脈を見てサポートしていません、私たちのためにそれは非常にユーザーフレンドリーであるため、我々は以下の操作を使用するなどの"

たとえば:エコー「スキャン『upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822 』」| HBaseのシェル
結果//出力コンソールテーブルに、効果はHBaseのシェルスクリプト内のクエリに相当し
、フロントで必要な場合、スクリプトは『』が含まれていることを//注意エスケーププラス\
//次の例は、例の二つの方法を使用して、各コマンドが確認され

た値ValueFilterの値に応じて2フィルタ
    スキャン「テーブル」、フィルタ=>「ValueFilter( =「サブストリング:値value ') "テーブルのカラム値で//クエリのレコードは、文字列の指定された
    例を:upos_city_qh_yushu:tb_detail_userloc_outdoor_22180822を、FILTER =>" ValueFilter(='サブ:6327「) "
    //ルックアップテーブルは、順番を示しますtb_detail_userloc_outdoor_22180822:upos_city_qh_yushu名
    6327のレコードの値が含まれています
 


リストFamilyFilterクラスタに記載のフィルタ
    「(FamilyFilter、FILTER =>スキャン「テーブル」 = 『サブストリング: 値string』)は」//クエリは、クラスタは、文字列の記録を示す表含むランク
    例:スキャン'upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822'を、FILTER => "FamilyFilter(=、 'サブ:L')"
    
    エコー"スキャン'upos_city_qh_yushuは:tb_detail_userloc_outdoor_20180822'、FILTER => \" FamilyFilter(=、 'サブ:L')\ "" | HBaseのシェル

4.フォローの行キーフィルタのRowFilterに
    
    データの文字列(ファジークエリ)を含有するフィルターキーの旅行の記録を。
    コマンド:スキャン「テーブル」、フィルタ=>「のRowFilter( =「サブストリング: 文字列を値') "
    例:スキャン' upos_city_qh_yushuは:tb_detail_userloc_outdoor_20180822」、FILTER => "のRowFilter(=、 'サブ:3040') "
    
    エコー"スキャン"upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822' 、FILTER => \ "のRowFilter(= 'サブストリング:3040')\"」| HBaseのシェル
    
    。Bは、キーフィルタの行(<、<=、=、>、> =)に応じて決定
    スキャン'テーブル'、FILTER => "のRowFilter(:コマンド = 'バイナリ: OKキー値')"
    の例:スキャン'upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822'、FILTER => "のRowFilter(= 'バイナリ:00_460075097670490_1534925332480')"
    
    エコー"スキャン'upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822'、FILTER => \"のRowFilter(= 'バイナリ:00_460075097670490_1534925332480')\ "" | HBaseのシェル

次のようにクエリ結果は以下のとおりです。00_460075097670490_1534925332480のすべてのレコードへの回線キー

<、<=、>、> =共感

    。行のCろ過PrefixFilterプレフィックスキー
    スキャン「テーブル」、FILTER =>「PrefixFilter( 『 OKキー接頭辞』)」キー//旅行のクエリ文字列の開始を記録するために
    スキャン「upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822」、FILTER = > "PrefixFilter( '00_46007509767')"
    エコー"スキャン'upos_city_qh_yushu:tb_detail_userloc_outdoor_20180822'、=> \ FILTER" PrefixFilter( '00_46007509767')\ "" | HBaseのシェル

。フィルタの2つのJava API操作
最初の1、いくつかのフィルタリング操作のHBase一部のパラメータ

(1)比較CompareFilter.CompareOpの
比較演算子を使用すると、次のカテゴリの値を選択することができ、比較の間の関係を定義するために使用されます。

EQUALに等しい
より大きいの大きい
よりGREATER_OR_EQUAL又は等しい
未満LESS
以下LESS_OR_EQUAL
NOT_EQUAL等しくありません


(2)比較ByteArrayComparableは
コンパレータによって目標マッチング結果を多様化することができ、コンパレータを使用することができる以下のサブクラスを有します。

完全なバイト配列一致BinaryComparator 
BinaryPrefixComparatorマッチングプレフィックスバイト配列 
BitComparator
NullComparator
RegexStringComparator正規表現マッチング
のマッチングサブストリングSubstringComparator


2. HBaseの接続構成を、接続された取得用のHBase

   / **
    *获取HBaseの连接的配置
    * @param定足数举例:127.0.0.1:2181
    * @return
    * /
   プライベート設定getConfiguration(文字列定足数)
   {
       設定CONF = HBaseConfiguration.create()。
       conf.set( "hbase.zookeeper.quorum"、定足数)。
       conf.set( "hbase.rootdir"、 "/データ/ Hadoopの/データ")。
       conf.set( "zookeeper.znode.parent"、 "/ HBaseの");
       CONFを返します。
   }


   / **
    *接続のHBaseを取得
    @param confに*
    * @return
    * /
   プライベート接続のgetConnection(設定のconf)
   {
       接続コネティカット= NULL;
           試み 
           {
               コネティカット= ConnectionFactory.createConnection(CONF);
               System.out.printlnは(「ゲット接続のHBase成功"+ conf.get(" hbase.zookeeper.quorum "));!
           }キャッチ(IOExceptionをE){
               System.out.printlnは(" HBaseの接続に失敗ゲット「+ e.getMessage());
           }
       
       コネティカットを返します;
   }

3.スキャン対象物を得、フィルタ条件を設定します

    = Connection.GetTable表には、表(TableName.valueOf(tableNameのは));
    //操作の接続工程、および所望のテーブルオブジェクト取得するためのクエリのテーブル名が取得した
    新しいスキャン()=スキャンスキャン; // オブジェクトのスキャンを取得しますオブジェクト照会する
    
    クエリをフィルタリングするフィルタを設定してもよい:
    
    唯一つのフィルタ条件の場合、種々のフィルタオブジェクトを使用向けるように
    使用して、種々のフィルタ条件:
    FilterList新しい新しいFilterListフィルタ=(に); //フィルタセットは
    、次に使用scan.setFilter(フィルタ)であり; //は内フィルタに追加
    = table.getScanner(スキャン)最終使用ResultScannerのRS; // 結果セットを取得するため

のJava APIフィルタ演算:

カラムベースのクラスタフィルタFamilyFilter。
コンストラクタ:
    FamilyFilter(CompareFilter.CompareOp familyCompareOp、ByteArrayComparable familyComparator)

    =新しい新しいFamilyFilter familyFilter FamilyFilter(CompareOp.EQUAL、新しい新BinaryComparator(Bytes.toBytes(「情報」)));   
    //すべての列のクラスタ情報のデータを返す

フィルタQualifierFilter列に基づいてBを。
カラム名に基づいてフィルタB1。
    コンストラクタ:
    QualifierFilter(CompareFilter.CompareOp OP、ByteArrayComparable qualifierComparator)
    例: 
    QualifierFilter qualifierFilter =新しい新しいQualifierFilter(
        CompareOp.EQUAL、新しい新しいBinaryComparator(Bytes.toBytes( "ECI")));
        //は、ECIを含む列データを返す

列名プレフィックスに基づいてB2。フィルタ
    コンストラクタ:
    columnPrefixFilter(バイト[]プレフィックス) 
     columnPrefixFilter columnPrefixFilter =新新columnPrefixFilter(Bytes.toBytes(「I」));
     //は私から始まるデータ列名のすべてを返します

。カラム名を複数に基づいてB3フィルタはMultipleColumnPrefixFilterを接頭辞
    バイト[] []バイト=新しい新しいバイト[] [] {Bytes.toBytes( "I")、Bytes.toBytes( "ECI")};
          
    MultipleColumnPrefixFilter multipleColumnPrefixFilter =新しい新しいMultipleColumnPrefixFilter(バイト);

  //私にすべての行を返します又はECI開始データ列
1
行RowkeyFilter(メジャー)のCフィルタベースキー
C1 OKキー照合フィルタ。
    フィルタフィルタ= NULL;
    文字filterStr =「00_460075097670490_1534925332480」;
    
    キーの列は、フィルタ等しい:
    フィルタ=新しい新しいPrefixFilterを( Bytes.toBytes(filterStr.trim())); // キーの指定された行の全内容は、コンテンツのための鍵の行を返す
    
    鍵域フィルタ行: 
    フィルタのRowFilter新しい新=(CompareOp.NOT_EQUAL、新しい新しいBinaryComparator(filterStr.trim() .getBytes()));
    //戻りOKキーではないとは、指定されたキー列の内容全体に等しい
    
    未満フィルタよりもライン・キー
    (CompareOp.LESS、新しい新しいBinaryPrefixComparator(filterStr.trim()GetBytesメソッド()))=のRowFilter新しい新しいフィルタを;
    //戻りOKキープレフィックスは以下のキーの列を指定するか、または全体の内容に等しい
    
    行キー少ないフィルタ: 
    フィルタのRowFilter新しい新=( CompareOp.LESS_OR_EQUAL、新しい新しいBinaryPrefixComparator);(filterStr.trim()GetBytesメソッド())
    //戻りOKキー未満またはキーの指定された行に等しいの全内容プレフィックス
    
    キーの行がフィルタより大きい: 
    フィルタのRowFilter新しい新=(CompareOp.GREATER、新しい新; BinaryPrefixComparator(filterStr.trim()GetBytesメソッド()))
    //戻りOKキー接頭辞指定された行に等しい全体コンテンツ鍵より大きい
    
    以上のフィルタキーの列: 
    フィルタのRowFilter新しい新=(CompareOp.GREATER_OR_EQUAL、新しい新しいBinaryPrefixComparator(filterStr.trim ().getBytes()));
    //キー全体のの指定された行以上のキーの列戻り 

C2フィルタをキーの列を含む。
    備えOKキーフィルター: 
    =のRowFilter新しい新しいフィルタ(CompareFilter.CompareOp.EQUAL、新しい新しいSubstringComparator(filterStr.trim())); 
    //キー旅行フィルタは、すべてのデータが文字列指定含ま

C3およびstartkey endkeyにより濾過した。
    
    上記のフィルタと比べて、結果セットのデータ数が実質的に同じであるとき、このフィルタの実施形態の効率が大幅に高くなっている
    私たちのビジネスシーンで最も広く使用されている
    
    このように使用されるフィルタオブジェクトではありません。 
    
    コードは以下の通りである:
    文字列= StartKey「00_460075097670490_1534925332480 ";
    文字列EndKey =" 00_460075097670490_1534925432480 "
    スキャンスキャン=新しい新しいスキャン();
    scan.setStartRow(startkey.trim()GetBytesメソッド());
    scan.setStopRow(endkey.trim()GetBytesメソッド());
    //クエリから終了キー記録の行の総数に対するホーム列キー
    //注意:開始行と終了行キー!!キー含む

:以前に取得したResultScannerオブジェクトに応じて、結果セットとを横切る出力
    ResultScanner RS = table.getScanner (スキャン)。
        (結果結果:RS)のために{
             リスト<細胞>細胞= result.listCells()。    
             (セルのセル:セル)のための{
                 文字列= Bytes.toString(result.getRow())。
                 ストリングfamily1 = Bytes.toString(CellUtil.cloneFamily(セル))。
                 ストリング修飾子= Bytes.toString(CellUtil.cloneQualifier(セル))。
                 文字列値= Bytes.toString(CellUtil.cloneValue(セル))。
                 System.out.println( "[行:" +行+ "]、[ファミリ:" + family1 + "]、[修飾子:" +修飾子+ "]"
                         + "[値: "+値+"]、[時間:" + cell.getTimestamp()+ "]");
            }
        }

发布了17 篇原创文章 · 获赞 2 · 访问量 5万+

おすすめ

転載: blog.csdn.net/u011250186/article/details/103823807