2012-02-15 11 views
38

HBase RESTインターフェイス(HBase 0.90.4-cdh3u3)でフィルタを使用する方法を理解できません。ドキュメントでは、 "文字列"のスキーマ定義が得られますが、使用方法は示されていません。HBase REST Filter(SingleColumnValueFilter)

curl -v -H 'Content-Type: text/xml' -d '<Scanner startRow="ddo" stopRow="ddp" batch="1024"/>' 'http://hbasegw:8080/table/scanner' 

をしてから

curl -s -H "Content-Type: text/xml" http://hbasegw:8080/table/scanner/13293426893883128482b | tidy -i -q -xml 

を取得しかし、今、私はSingleColumnValueFilterを使用したいとXMLで何とかそれをエンコードする必要があります。

だから、私はこれを行うことができますよ。 誰かがこれについての例を持っていますか?

おかげで、スキャナのXMLで マリオ

+0

これで、ScannerModel-> stringifyFilter()を使用してJSON表現を作成できることが分かりましたが、それでも機能しません。 – Mario

+0

バンプ...誰もいない? – Mario

+0

[HBASE-3482](https://issues.apache.org/jira/browse/HBASE-3482)を参照してください。XML形式を使用する場合、FilterModelを何とかXMLエンコードする必要があります。正しい形式を把握できますか[ScannerModel.java](http://hbase.apache.org/xref/org/apache/hadoop/hbase/rest/model/ScannerModel.html)(具体的には内部クラスFilterModel)のソースに基づいて –

答えて

11

フィルタフィールドは、JSONとしてフォーマット文字列です。フィルタのJSONには引用符がたくさんあるので、一重引用符を避けるために、curlの-dパラメータに別のファイルを使用することをお勧めします。

<Scanner startRow="cm93MDE=" endRow="cm93MDg=" batch="1024"> 
    <filter> 
    { 
     "latestVersion":true, "ifMissing":true, 
     "qualifier":"Y29sMQ==", "family":"ZmFtaWx5", 
     "op":"EQUAL", "type":"SingleColumnValueFilter", 
     "comparator":{"value":"MQ==","type":"BinaryComparator"} 
    } 
    </filter> 
</Scanner> 

あなたはJSONのフィルタ文字列がどのように見えるべきかを発見するにはどうすればよい:ファイルargs.txtがある

curl -v -H "Content-Type:text/xml" -d @args.txt http://hbasegw:8080/table/scanner

HBaseのJava APIの標準Filterオブジェクトを指定すると、文字列化されたフィルタを吐き出すJavaコードを簡単に使用できます。

SingleColumnValueFilter filter = new SingleColumnValueFilter(
    Bytes.toBytes("family"), 
    Bytes.toBytes("col1"), 
    CompareFilter.CompareOp.EQUAL, 
    Bytes.toBytes("1") 
); 
System.out.println(ScannerModel.stringifyFilter(filter)); 

JSONとXMLには、Base64でエンコードされたデータが必要です。私は上記のcurlコマンドをテーブル上でテストしましたが、うまくいきました。

あなたが疑問に思っている場合は、はい、スキャナー用のREST APIは、開発者にとって使いやすいものではありません。

関連する問題