我们在干什么?
我们将原始数据保存在云数据存储中,我们正在处理这些数据,并在清理和提取后将其放入GBQ进行分析。在
因此,由于我们有非常大的数据,我们正在成批地清理它,并存储一个光标字符串,以便从上一批中离开的位置开始下一批。在
代码片段
#read cursor string and create cursor object
start_cursor = Cursor(urlsafe=tag_generated_till_cursor_string)
entities_list, next_cursor, more = ndbEntity.query().order(ndbEntity.updated_date)\
.fetch_page(500, start_cursor=start_cursor)
if next_cursor:
# persisting next_cursor.urlsafe()
到目前为止还不错吧?在
现在的问题是什么?
我们在处理完所有这类实体后处理到达实体列表末尾时遇到了困难。在
当到达终点后,我们将得到next_cursor
为无,因此有两件事可以完成:在
next_cursor
为无第一个选项的问题是下一个批处理将从头开始,我们将最终重新处理所有原始数据。在
第二种方法的问题是,我们将多次处理最后一页的实体,因为在上一批中我们没有更新游标字符串。在
这两种方法都不适用于我们,而且在重新插入GBQ之前,没有有效的方法来检查是否已在GBQ中处理过。在
此外,也没有多少关于游标的文档可以帮助我们忽略对任何实体的重新处理。有什么能帮助我们克服这个问题,有什么东西可以把我们从这个问题中拯救出来吗?在
当
next_cursor
为None
时,您只需标记该数据处理操作已完成,而不保留任何内容:没有剩余的批处理。在您不应该再次对导致重复的数据运行批处理-只需重新处理一个(或多个)已处理的批处理。在
相关问题 更多 >
编程相关推荐