^_^ 皆さんこんにちは。
thrift の C++ でメソッド「scannerOpenWithScan()」と filterString を使用するにはどうすればよいですか。hbase のバージョンは hbase-0.92.1 です。
列の値に応じて行を選択したいので、「examples/thrift/DemoClient.cpp」に scannerOpenWithScan() を追加しました。
/**
* open a scanner with scan (filter string)
*/
320 TScan tscan;
321 std::string filterStr;
322 filterStr = "SingleColumnValueFilter (<=, '25', 'entry', 'num', true, false)";
323 tscan.__set_filterString(filterStr);
324
325 std::cout << "Starting scanner with scan..." << std::endl;
326 scanner = client.scannerOpenWithScan(t, tscan);
327 std::cout << "The scanner id is " << scanner << std::endl;
328 try { ...... }
しかし、スキャナー ID が返されません。エラーは次のとおりです。
Starting scanner with scan...
ERROR: No more data to read.
thrift.log エラーは次のとおりです。
796 java.lang.IllegalArgumentException: Incorrect filter string SingleColumnValueFilter(<=, '25', 'entry', 'num', true, false)
797 at org.apache.hadoop.hbase.filter.ParseFilter.parseSimpleFilterExpression(ParseFilter.java:250)
798 at org.apache.hadoop.hbase.filter.ParseFilter.parseFilterString(ParseFilter.java:168)
799 at org.apache.hadoop.hbase.thrift.ThriftServer$HBaseHandler.scannerOpenWithScan(ThriftServer.java:766)
thrift.out は次のとおりです。
java.lang.reflect.InvocationTargetException
6 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
7 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
8 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
9 at java.lang.reflect.Method.invoke(Method.java:616)
10 at org.apache.hadoop.hbase.filter.ParseFilter.parseSimpleFilterExpression(ParseFilter.java:240)
11 at org.apache.hadoop.hbase.filter.ParseFilter.parseFilterString(ParseFilter.java:168)
12 at org.apache.hadoop.hbase.thrift.ThriftServer$HBaseHandler.scannerOpenWithScan(ThriftServer.java:766)
13 at org.apache.hadoop.hbase.thrift.generated.Hbase$Processor$scannerOpenWithScan.getResult(Hbase.java:3821)
私はそれについて何も知りません。フィルター機能を備えた C++ を使用して HBase にアクセスする方法を知っている人はいますか?