使用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
block ),正如上面链接的用户指南中的大量示例所解释的那样,是一个纯粹的客户端便利 API,使应用程序代码更易于编写和推理。如果 with
block 成功完成,所有突变都会一次性发送到服务器。
但是...这只是幸福的道路。如果 with
block 中的某个地方引发了一些 Python 异常,该怎么办?这就是 transaction
标志发挥作用的地方:如果 True
,则根本不会向服务器发送任何数据;如果 False
,则任何待处理的数据都会被发送到服务器。反正脸红了。首选哪种行为很大程度上取决于您的用例。
关于python - HBase 的 HappyBase 和原子批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565120/