删除Apache Beam 2.2.0中的Bigtable行

时间:2018-01-02 18:03:39

标签: google-cloud-dataflow apache-beam google-cloud-bigtable

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包含一组行级操作。我已经找到了如何使用它来处理单元级数据,因此可以创建新行并创建/删除列,但是如果给定现有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依赖项系列中导入,发行说明建议将其弃用且不应该使用(实际上它似乎与新的配置类/等不兼容)。

**进一步更新:

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

但是:看起来现在有两种不同的Mutation类: com.google.bigtable.v2.Mutationorg.apache.hadoop.hbase.client.Mutation

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

我建议您继续使用CloudBigtableIObigtable-hbase-beam。它不应与CloudBigtableIO中的bigtable-hbase-dataflow太过不同。

CloudBigtableIO使用HBase org.apache.hadoop.hbase.client.Mutation并将其转换为封底下的Bigtable等效值