在 Apache Beam 2.2.0 中删除 Bigtable 行

Delete Bigtable row in Apache Beam 2.2.0

Dataflow 1.x 版本中,我们可以使用 CloudBigtableIO.writeToTable(TABLE_ID) 来创建、更新和删除 Bigtable 行。只要DoFn配置为输出Mutation对象,它就可以输出PutDelete,并且CloudBigtableIO.writeToTable()成功创建、更新、或删除给定 RowID 的行。

似乎新的Beam 2.2.0 API使用了BigtableIO.write()函数,它与KV<RowID, Iterable<Mutation>>一起工作,其中Iterable包含一组行级操作。我已经找到了如何使用它来处理单元格级数据,因此可以创建新行和 create/delete 列,但是我们现在如何删除行,给定现有的 RowID?

感谢任何帮助!

** 一些进一步的说明:

来自此文档:https://cloud.google.com/bigtable/docs/dataflow-hbase 我了解到将依赖项 ArtifactID 从 bigtable-hbase-dataflow 更改为 bigtable-hbase-beam 应该与 Beam 版本 2.2.0 兼容,文章建议执行 Bigtble 写入(并因此使用 CloudBigtableIO.writeToTable() 以旧方式删除)。然而,这需要从 com.google.cloud.bigtable.dataflow 系列的依赖项中导入,发行说明建议不推荐使用并且不应使用(实际上它似乎与新配置 classes/etc 不兼容)

** 进一步更新:

bigtable-hbase-dataflow 更改为 bigtable-hbase-beam ArtifactID 后,我的 pom.xml 似乎没有正确刷新。项目更新后,我就可以从 com.google.cloud.bigtable.beam.* 分支,它似乎至少在最小测试中起作用。

然而:看起来现在有两个不同的突变 类: com.google.bigtable.v2.Mutationorg.apache.hadoop.hbase.client.Mutation ?

为了让所有东西一起工作,必须正确指定哪个突变用于哪个操作?

有更好的方法吗?

我建议您继续使用 CloudBigtableIObigtable-hbase-beam。它应该与 bigtable-hbase-dataflow.

中的 CloudBigtableIO 差别不大

CloudBigtableIO 使用 HBase org.apache.hadoop.hbase.client.Mutation 并在幕后将它们转换为 Bigtable 等效值

遗憾的是,Apache Beam 2.2.0 没有提供用于删除 Bigtable 中的整行(包括行键)的本机接口。唯一完整的解决方案是继续使用您已经提到的 CloudBigtableIO class。

另一种解决方案是只删除行中的所有单元格。这样,您就可以完全使用 BigtableIO class。但是,此解决方案不会删除行键本身,因此存储行键的成本仍然存在。如果您的应用程序需要删除很多行,此解决方案可能并不理想。

import com.google.bigtable.v2.Mutation
import com.google.bigtable.v2.Mutation.DeleteFromRow

// mutation to delete all cells from a row
Mutation.newBuilder().setDeleteFromRow(DeleteFromRow.getDefaultInstance()).build()