web-dev-qa-db-ja.com

HBase REST Filter(SingleColumnValueFilter)

HBase RESTインターフェイス(HBase 0.90.4-cdh3u3)でフィルターを使用する方法がわかりません。ドキュメントには「文字列」のスキーマ定義が記載されていますが、表示されません。それを使用する方法。

だから、私はこれを行うことができます:

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にエンコードする必要があります。誰かがこれの例を持っていますか?

ありがとう、マリオ

38
Mario

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

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

ファイルargs.txtは:

<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フィルター文字列がどのように見えるかをどのように発見しますか?これはJava HBaseの標準のFilterオブジェクトを指定して文字列化されたフィルターを吐き出すコードを簡単に実行する方法です= Java API。

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は、まだ開発者にとって使いやすいものではありません。

12
André Staltz