2012-02-15 20 views
38

Tôi không thể tìm ra cách sử dụng bộ lọc trong giao diện REST HBase (HBase 0.90.4-cdh3u3). Tài liệu này chỉ cung cấp cho tôi một định nghĩa lược đồ cho một "chuỗi", nhưng không hiển thị cách sử dụng nó.Bộ lọc REST HBase (SingleColumnValueFilter)

Vì vậy, tôi có thể làm điều này:

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

và sau đó lấy bằng

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

Nhưng bây giờ tôi muốn sử dụng một SingleColumnValueFilter và phải mã hóa nào đó trong XML. Có ai có ví dụ về điều này không?

Cảm ơn, Mario

+0

Ok, vì vậy tôi đã tìm ra rằng tôi có thể tạo một biểu diễn JSON của bộ lọc bằng ScannerModel-> stringifyFilter(), nhưng nó vẫn không hoạt động. – Mario

+0

bump ... không ai? – Mario

+0

Xem [HBASE-3482] (https://issues.apache.org/jira/browse/HBASE-3482), khi sử dụng định dạng XML bạn cần phải mã hóa XML FilterModel bằng cách nào đó ... Có lẽ bạn có thể tìm ra định dạng phù hợp dựa trên nguồn của [ScannerModel.java] (http://hbase.apache.org/xref/org/apache/hadoop/hbase/rest/model/ScannerModel.html) (cụ thể là lớp bên trong FilterModel) –

Trả lời

11

lĩnh vực Lọc trong XML Scanner là chuỗi định dạng JSON. Vì JSON cho bộ lọc có nhiều dấu ngoặc kép trong nó, tôi khuyên bạn nên sử dụng một tệp riêng biệt cho tham số -d của lệnh curl, để tránh báo giá đơn lẻ.

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

Trong trường hợp tập tin args.txt là:

<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> 

Làm thế nào để bạn khám phá cách chuỗi lọc JSON nên xem xét như thế nào? Đây là một cách dễ dàng thông qua mã Java mà phun ra bộ lọc đã được xâu chuỗi cho một đối tượng Bộ lọc chuẩn từ API Java của HBase.

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

Lưu ý rằng JSON và XML yêu cầu dữ liệu được mã hóa trong Base64. Tôi đã thử nghiệm lệnh curl ở trên trên một bảng và nó hoạt động tốt.

Trong trường hợp bạn tự hỏi, có, API REST dành cho máy quét vẫn chưa thân thiện với nhà phát triển vì nó có thể nhận được.

Các vấn đề liên quan