準備
- python版appengine-sdkをインストールする
web.xmlにremote_api用のServletの設定を書く
<servlet> <servlet-name>remoteapi</servlet-name> <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>remoteapi</servlet-name> <url-pattern>/remote_api</url-pattern> </servlet-mapping>security-constraintも追加しておいた方が良さげ。
<security-constraint> <web-resource-collection> <url-pattern>/remote_api</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
ロード設定用のyamlファイルを書く
python_preamble: - import: base64 - import: re - import: google.appengine.ext.bulkload.transform - import: google.appengine.ext.bulkload.bulkloader_wizard - import: google.appengine.api.datastore - import: google.appengine.api.users transformers: - kind: Scores connector: csv connector_options: encoding: ms932 property_map: - property: __key__ external_name: id import_transform: int - property: name external_name: name - property: score external_name: score import_transform: transform.none_if_empty(float)
日付: transform.import_date_time('%Y/%m/%d %H:%M')
固定値: import_transform: lambda x:1
数値変換: import_transform: lambda x:int(x)*100
※lambdaは引数の:の後にスペースを空けるとダメな様です
ロード用CSV
id,name,score 1,Alice,5.0 2,Bob,2.5 3,Caroline,
ロード用コマンド
appcfg.py upload_data --filename=test.csv --config_file=test.yml --url=http://{appid}.appspot.com/remote_api --application={appid} --kind=Scores -v※{appid}はアプリケーションIDに置き換える
security-constraintの設定をしている場合、毎回管理者アドレス/パスワードの入力が必要です。
ローカルのdev_appserverだとエラーが出て動きませんでした…
こんな感じに反映されます。
※1万件だと約500秒(8分ちょっと)くらいかかりました(CPU Timeを無料Quotaの10%ほど消費します)
その他注意点
3/22追記:slim3ではなくscenic3の方の設定でした。matcherで/remote_apiを除外したらOK。
参考: Ikai Lan says / Using the bulkloader with Java App Engine
0 件のコメント:
コメントを投稿