【问题标题】:Delete Bigtable row in Apache Beam 2.2.0在 Apache Beam 2.2.0 中删除 Bigtable 行
【发布时间】:2018-01-02 18:03:38
【问题描述】:

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 依赖系列导入,发行说明建议已弃用且不应使用(实际上它似乎与新的配置类/等不兼容)

** 进一步更新:

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

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    很遗憾,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()
    

    【讨论】:

    • 删除一行中的所有单元格就是删除一整行。
    • 当一行中的所有单元格都被删除时,行键是否会在某个时候被垃圾回收?
    • 当一行被删除(表现为删除所有单元格)时,该行在磁盘上的数据最终会被垃圾回收。
    • @SolomonDuskis 这是否意味着突变 cloud.google.com/bigtable/docs/hbase-client/javadoc/com/google/… 是您在 Bigtable 中删除一行的方式?
    • 没错。 Mutation 有 4 种类型:SetCell(用于 HBase Puts)、DeleteFromColumn、DeleteFromFamily 和 DeleteFromRow(都用于 HBase Deletes)。您可以在此处查看协议:github.com/googleapis/googleapis/blob/master/google/bigtable/v2/…
    【解决方案2】:

    我建议您继续使用CloudBigtableIObigtable-hbase-beam。应该和bigtable-hbase-dataflow中的CloudBigtableIO差别不大。

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

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2020-09-26
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多