在 Google Bigtable 中使用 MultiRowRangeFilter

Using the MultiRowRangeFilter in Google Bigtable

我一直在尝试在 Google Bigtable 中使用 MultiRowRangeFilter,但未能使其正常工作。 我主要做的是使用数据流扫描和处理 Bigtable 的不同范围。

List<RowRange> ranges = getRanges();
MultiRowRangeFilter filter = new MultiRowRangeFilter(ranges);

Scan scan = new Scan();    
scan.setFilter(filter);

config = CloudBigtableScanConfiguration.Builder()
                .withProjectId("my-project")
                .withInstanceId("my-instance")
                .withTableId("my-table")
                .withScan(scan)
                .build();

DataflowPipelineOptions options = PipelineOptionsFactory.as(DataflowPipelineOptions.class);
options.setProject("my-project");
options.setStagingLocation("gs://my-bucket");
options.setRunner(DataflowRunner.class);

Pipeline p = Pipeline.create(options);
p.apply(Read.from(CloudBigtableIO.read(config)))
                .apply(ParDo.of(new MyFunction()))
                .apply(TextIO.write().to("gs://output-bucket"));

getRanges 是一个函数 returns 一个 List<RowRange> 已经像这样被初始化:

RowRange range = new RowRange("1388710#1823246", true, "1388710#1823302", true);

不是扫描并仅返回我感兴趣的范围,而是扫描 returns 我 table.

中的所有数据

知道我做错了什么吗?

根据评论中的讨论,MultiRowRangeFilter 目前不适用于 Cloud Dataflow,功能请求在 GitHub 此处跟踪:

https://github.com/googleapis/cloud-bigtable-client/issues/1239