1

Bigtable からデータをフィルタリングするためのフィルターを作成しようとしています。bigtable-hbaseドライバーと HBase ドライバーを使用しています。実際、ここに私の依存関係がありpom.xmlます:

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-common</artifactId>
        <version>${hbase.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-protocol</artifactId>
        <version>${hbase.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>${hbase.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>${hbase.version}</version>
    </dependency>

    <dependency>
        <groupId>com.google.cloud.bigtable</groupId>
        <artifactId>bigtable-hbase</artifactId>
        <version>${bigtable.version}</version>
    </dependency>

次のようにデータをフィルタリングしています。

Filter filterName  = new SingleColumnValueFilter(Bytes.toBytes("FName"), Bytes.toBytes("FName"),
                CompareFilter.CompareOp.EQUAL, new RegexStringComparator("JOHN"));
FilterList filters = new FilterList();

filters.addFilter(filterName);

Scan scan1 = new Scan();
scan1.setFilter(filters);

これは正常に動作します。しかし、その後、前のコードに次を追加します。

Filter filterSalary = new SingleColumnValueFilter(Bytes.toBytes("Salary"), Bytes.toBytes("Salary"),
                CompareFilter.CompareOp.GREATER_OR_EQUAL, new LongComparator(100000));
filters.addFilter(filterSalary);

そして、それは私にこの例外を与えます:

Exception in thread "main" com.google.cloud.bigtable.hbase.adapters.filters.UnsupportedFilterException: Unsupported filters encountered: FilterSupportStatus{isSupported=false, reason='ValueFilter must have either a BinaryComparator with any compareOp or a RegexStringComparator with an EQUAL compareOp. Found (LongComparator, GREATER_OR_EQUAL)'}
at com.google.cloud.bigtable.hbase.adapters.filters.FilterAdapter.throwIfUnsupportedFilter(FilterAdapter.java:144)
at com.google.cloud.bigtable.hbase.adapters.ScanAdapter.throwIfUnsupportedScan(ScanAdapter.java:55)
at com.google.cloud.bigtable.hbase.adapters.ScanAdapter.adapt(ScanAdapter.java:91)
at com.google.cloud.bigtable.hbase.adapters.ScanAdapter.adapt(ScanAdapter.java:43)
at com.google.cloud.bigtable.hbase.BigtableTable.getScanner(BigtableTable.java:247)

だから私の質問は、長いデータ型をフィルタリングする方法ですか? hbase の問題ですか、それとも bigtable 固有ですか?

これを見つけましたHBaseでSingleColumnValueFilterを使用してカスタムコンパレータを使用するにはどうすればよいですか? しかし、jarをサーバーにロードできないため、私の場合には当てはまりません。

4

1 に答える 1

2

SingleColumnValueFilter次のコンパレータをサポートしています。

  • BinaryComparator
  • BinaryPrefixComparator
  • RegexStringComparator.

最新のリストについては、次のリンクを参照してください。

https://cloud.google.com/bigtable/docs/hbase-differences

于 2015-06-10T16:57:27.387 に答える