3

次のコマンドを使用して、データストアからデータをダウンロードしようとしています。

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回実行する必要がありましたが、成功したのは最後の1つだけでした。このエラーを回避する方法はありますか?以前は、たまに失敗したためにスクリプトでダウンロードを自動化できなかったのが唯一の心配でした。今では、データをまったく取り出せなくなるのではないかと心配しています。

この問題については前にここで説明しました が、投稿は古く、提案されたフラグが何をするのかわかりません。したがって、同様のクエリを再度投稿します。


いくつかの追加の詳細。ここで述べたように、私は中断されたダウンロードを続行する提案を試みました(App Engineからのデータのダウンロードのセクションで)。中断後に再開すると、エラーは発生しませんが、ダウンロードされる行数は、データストア管理者が表示するエンティティ数よりも少なくなります。これは、次のメッセージが表示されます。

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

データストア管理者は、この特定の種類には最大4300のエンティティがあると言っています。残りのエンティティがダウンロードされないのはなぜですか?

ありがとう!

4

1 に答える 1

0

最初のエラーで「ユニコード」という単語を見たという事実に基づいて、これについて完全に無知な推測をするつもりです。Web からユーザーが生成したデータに関連する問題がありました。ユーザーがいくつかのユニコード文字を入力すると、かなりの数のrepr関数と他の多くのものを実装したため、おそらく私のせいで、すべてのものが壊れ始めました。可能であれば、ライブ アプリのコンソール ユーティリティを使用してデータを簡単にスキャンしてください (4k レコードのみの場合)、すべてのデータを ASCII 文字列に変換して、準拠していないものを見つけてください。

その後、ユーザー入力の「サニタイズ」を開始しました (申し訳ありませんが、「パブリック ハンドル」フィールドは ASCII のみのプレーヤーである必要があります!)

于 2011-03-18T14:28:26.500 に答える