使用bulkloader从Google App Engine下载数据时出错

时间:2011-03-10 17:53:26

标签: python google-app-engine bulkloader

我正在尝试使用以下内容从数据存储区下载一些数据 命令:

appcfg.py download_data --config_file=bulkloader.yaml --application=myappname 
                        --kind=mykindname --filename=myappname_mykindname.csv
                        --url=http://myappname.appspot.com/_ah/remote_api 

当我在这种特殊类型/表格中没有太多数据时,我可以 一次性下载数据 - 偶尔会进入 以下错误:

.................................[ERROR   ] [Thread-11]
ExportProgressThread:
Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\google\appengine\tools
\bulkload
er.py", line 1448, in run
    self.PerformWork()
  File "C:\Program Files\Google\google_appengine\google\appengine\tools
\bulkload
er.py", line 2216, in PerformWork
    item.key_end)
  File "C:\Program Files\Google\google_appengine\google\appengine\tools
\bulkload
er.py", line 2011, in StoreKeys
    (STATE_READ, unicode(kind), unicode(key_start), unicode(key_end)))
OperationalError: unable to open database file

这是我在服务器日志中看到的:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/
ext/remote_api/handler.py", line 277, in post
    response_data = self.ExecuteRequest(request)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/
ext/remote_api/handler.py", line 308, in ExecuteRequest
    response_data)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/
api/apiproxy_stub_map.py", line 86, in MakeSyncCall
    return stubmap.MakeSyncCall(service, call, request, response)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/
api/apiproxy_stub_map.py", line 286, in MakeSyncCall
    rpc.CheckSuccess()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/
api/apiproxy_rpc.py", line 126, in CheckSuccess
    raise self.exception
ApplicationError: ApplicationError: 4 no matching index found. 

当出现该错误时,我只是重新运行下载和事情 会很好的。

最近,我注意到随着我的体型增加, 下载工具失败的次数更多。例如,有一种 ~3500个实体我必须运行5次命令 - 只有最后一次 哪个成功了。有没有办法解决这个错误?以前,我唯一的 担心我无法在脚本中自动下载,因为 偶尔的失败 - 现在我很害怕我无法得到我的 数据完全没有。

此问题已在之前讨论here 但是帖子很旧,我不确定建议的标志是做什么的 - 因此再次发布我的类似查询。


一些额外的细节。 如上所述here我尝试了建议继续进行中断下载(在从App Engine下载数据部分)。当我在中断后恢复时,我没有收到任何错误,但是下载的行数小于数据存储管理员向我显示的实体数量。这是我收到的消息:

[INFO    ] Have 3220 entities, 3220 previously transferred
[INFO    ] 3220 entities (1003 bytes) transferred in 2.9 seconds

数据存储区管理员告诉我这种特殊类型有~4300个实体。为什么剩下的实体没有下载?

谢谢!

1 个答案:

答案 0 :(得分:0)

基于我在第一个错误中看到“unicode”这个词的事实,我将对此做一个完全没有受过教育的猜测;我遇到的问题与我的数据是从网络上生成的用户有关。一个用户输入了一些unicode字符和一大堆东西开始破坏 - 可能是我的错 - 因为我已经实现了漂亮的 repr 函数和其他一些东西。如果可以,可以通过实时应用程序中的控制台实用程序快速扫描数据,也许(如果它只有4k记录),尝试将所有数据转换为ascii字符串以找到任何不符合的数据。

之后,我开始“消毒”用户输入(对不起,但我的“公共句柄”字段只需要ascii玩家!)