Python 使用游标检测云数据存储中实体的结束

Python 使用游标检测云数据存储中实体的结束,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我们在做什么? 我们在云数据存储中拥有原始数据,我们正在处理这些数据,并在清理和提取后将其放入GBQ中进行分析 因此,由于我们有非常大的数据,我们正在分批清理数据,并存储一个光标字符串,以便从上一批的右侧开始下一批 代码片段 #read cursor string and create cursor object start_cursor = Cursor(urlsafe=tag_generated_till_cursor_string) entities_list, next_cursor,

我们在做什么?

我们在云数据存储中拥有原始数据,我们正在处理这些数据,并在清理和提取后将其放入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()
到目前为止还不错吧

现在是问题吗?

处理完所有此类实体后,我们在处理到达实体列表末尾时遇到问题

在到达终点后,我们将得到
下一个光标
作为,因此可以做两件事:-

  • 持续
  • 如果
    下一个\u光标
  • 第一个选项的问题是,下一批处理将从头开始,我们将重新处理所有原始数据

    第二种方法的问题是,我们将多次处理最后一页的实体,因为在最后一批中,我们并没有更新游标字符串

    这两种方法都不适用于我们,也没有有效的方法在重新插入之前检查是否已在GBQ中处理


    此外,没有太多关于游标的文档可以帮助我们忽略对任何实体的重新处理。有什么可以帮助我们克服这个问题?有什么可以拯救我们

    next\u cursor
    None
    时,您应该只标记数据处理操作已完成,而不保留任何内容:没有剩余批次


    您不应该再次对相同的数据运行批处理,因为这是导致重复的原因-您只需要重新处理一个(或多个)已经处理的批。

    下一个\u光标
    时,您应该只标记数据处理操作已完成,不保留任何内容:没有剩余批

    您不应该再次对相同的数据运行批处理,因为这是导致重复的原因-您只需要重新处理一个(或多个)已处理的批