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()+ "]");
}
}
: