在Dataflow 1.x
版本中,我们可以使用CloudBigtableIO.writeToTable(TABLE_ID)
来创建,更新和删除Bigtable行。只要将DoFn
配置为输出Mutation
对象,就可以输出Put
或Delete
,并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.Mutation
和
org.apache.hadoop.hbase.client.Mutation
?
为了让所有东西一起工作,必须正确指定哪个Mutation用于哪个操作?
有更好的方法吗?
答案 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)
我建议您继续使用CloudBigtableIO
和bigtable-hbase-beam
。它不应与CloudBigtableIO
中的bigtable-hbase-dataflow
太过不同。
CloudBigtableIO
使用HBase org.apache.hadoop.hbase.client.Mutation
并将其转换为封底下的Bigtable等效值