使用Python中用于HBase的HappyBase API,可以通过以下方式执行批量插入:

import happybase
connection = happybase.Connection()
table = connection.table('table-name')
batch = table.batch()
# put several rows to this batch via batch.put()
batch.send()


如果该批次中途失败,会发生什么情况?已保存的行会保留吗?未保存的行会保留吗?

我在HappyBase github中指出,table.batch()方法采用transactionwal作为参数。是否可以以批处理中途失败时回滚成功保存的行的方式配置这些行?

happybase会在这里抛出异常,使我能够记录行键并执行批量删除吗?

最佳答案

您是否遵循Happybase文档中有关批量突变的教程?您似乎在这里混淆了几件事。 https://happybase.readthedocs.org/en/latest/user.html#performing-batch-mutations

批处理纯粹是性能的优化:它们避免了对存储/删除的每一行到Thrift服务器的往返访问,这可能会导致明显的加速。

如上面链接的用户指南中的许多示例所述,上下文管理器行为(with块)是纯粹的客户端便利性API,使应用程序代码更易于编写和推理。如果with块成功完成,则所有突变都将一次性发送到服务器。

但是...那只是幸福的道路。如果with块中某处引发了Python异常,该怎么办?这就是transaction标志起作用的地方:如果True,则根本没有数据发送到服务器,如果False,则无论如何都会刷新任何未决数据。首选哪种行为在很大程度上取决于您的用例。

10-07 16:13