我正在尝试从大于50M行的表中备份一些数据。这张桌子看起来像这样
#
entry_id : int unsignedauto_increment # unique entry id
---
time=CURRENT_TIMESTAMP : timestamp # current timestamp
room : varchar(255) # Room
id : varchar(255) # Sensor ID / NAME
value : double # sensor value我的计划是
获取有限数量的键(即fetch('KEY', limit=some_large_number))
<代码>G 213)
仅仅抓取(比方说1_000_000条目)是相当快的(几秒钟),但是如果我想通过检索主键->取取数据->删除这些条目--我基本上只能抓取数据(~ 100_000条目>20分钟或超时(?))。
使用数据联合逻辑执行此任务的最优雅/高效的方法是什么?
(Datajoint版本'0.13.2')
发布于 2021-05-30 14:11:46
如果您的数据没有变化,那么您可以使用limit和offset关键字跨出表,在不删除或限制的情况下取块。不需要首先检索主键、限制提取或删除块。
step = 1_000_000
for chunk in range((len(table) + step - 1) // step):
block = table.fetch(limit=step, offset=step * chunk)
... # save block如果这是一个简单的备份,那么删除是不必要的。如果您需要删除数据,您可以一次性删除它的结尾。
https://stackoverflow.com/questions/67761422
复制相似问题