使用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()
方法采用transaction
和wal
作为参数。是否可以以批处理中途失败时回滚成功保存的行的方式配置这些行?happybase会在这里抛出异常,使我能够记录行键并执行批量删除吗?
最佳答案
您是否遵循Happybase文档中有关批量突变的教程?您似乎在这里混淆了几件事。 https://happybase.readthedocs.org/en/latest/user.html#performing-batch-mutations
批处理纯粹是性能的优化:它们避免了对存储/删除的每一行到Thrift服务器的往返访问,这可能会导致明显的加速。
如上面链接的用户指南中的许多示例所述,上下文管理器行为(with
块)是纯粹的客户端便利性API,使应用程序代码更易于编写和推理。如果with
块成功完成,则所有突变都将一次性发送到服务器。
但是...那只是幸福的道路。如果with
块中某处引发了Python异常,该怎么办?这就是transaction
标志起作用的地方:如果True
,则根本没有数据发送到服务器,如果False
,则无论如何都会刷新任何未决数据。首选哪种行为在很大程度上取决于您的用例。