GAE は基本的にはプログラムから API を叩く必要があり、管理画面からボタンを押せばデータのエクスポートができる訳ではありません。いろいろと設定も必要だったので、メモしておきます。
以前の記事 GoogleAppEngine ことはじめ も合わせてどうぞ。
参考情報
GAE は Google developers が設定例豊富なのでとても親切です。逆に日本語情報が少ないので、困ったときには stackoverflow が役に立ちます。
Google developers: Uploading and Downloading Data in Python:
アップロードとダウンロード方法についてのドキュメントです。
Google developers: Structuring Data for Strong Consistency:
後述する、High Replication の仕組みについてのドキュメントです。
stackoverflow: How can I export data from Google App Engine High Replication datastore?:
High Replication の場合のデータエクスポート方法についてのQ and A です。
前提: Datastore には2種類ある
GAE の Datastore には "Storage Scheme" という項目があり、"master/slave datastore" か "High Replication" が設定されているようです。"master/slave datastore" は deprecated と公式ドキュメントに繰り返し記載されており、これから利用される方であれば "High Replication" が選択されているかと思います:
"High Replication" の場合は書き込みの反映がやや遅れることから、書き込んだデータが即時ダウンロード可能にならない点に注意が必要とのことです。
設定例
app.yml
API へ接続可能なように設定します。
# app.yml には application や version の指定が必要ですが、割愛します
builtins:
- remote_api: on
handlers:
- url : /remote_api
script : $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login : admin
bulkloader.yml
ダウンロード・アップロードの設定をします。
各属性値がどのような値を取るのかや、出力・入力のファイルフォーマットも指定可能です。ここではダウンロードするときに、日付型を '%Y/%m' の形式にして出力するようにしています。("Member" という値がありますが、これはテーブル名を指します。)
# If you have module(s) with your model classes, add them here. Also
# change the kind properties to model_class.
python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users
transformers:
- kind: Member
connector: csv
connector_options:
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
- property: date_of_enter
external_name: date_of_enter
import_transform: transform.import_date_time('%Y/%m')
export_transform: transform.export_date_time('%Y/%m')
- property: division
external_name: division
実行
appcfg.py に download_data パラメータを与えて、ダウンロードを実行します。全てのデータをダウンロードすることも可能ですが、kind パラメータを付ければ特定のテーブルのみダウンロード可能です。
$ appcfg.py download_data¥ --config_file=bulkloader.yaml¥ --filename=download.csv¥ --kind=Member¥ --url=http://.appspot.com/_ah/remote_api