2015年2月9日月曜日

GAE/Go の GuestBook チュートリアルの Greeting データをダウンロードする

1. Remote API を有効にする
https://cloud.google.com/appengine/docs/go/tools/remoteapi

2. bulkloader.yaml のひな形を作る
$ appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://localhost:8080/_ah/remote_api --application=dev~APPLICATION_ID .

3. bulkloader.yaml を編集する
  • connector と connector_options を埋める
  • property_map を編集する
    • external_name が CSV のカラムと一致しているか確認する
    • __key__ が適切かチェックする。値は import 時は key name に、export 時は Key オブジェクトになる
    • import 時に Key を自動生成し、export 時に省略したいなら、__key__ property を property map から削除する
  • model クラスのモジュールがあるときは、python_preamble: に追加し、kind property を model: クラス に変更する
  1. python_preamble:  
  2. import: base64  
  3. import: re  
  4. import: google.appengine.ext.bulkload.transform  
  5. import: google.appengine.ext.bulkload.bulkloader_wizard  
  6. import: google.appengine.ext.db  
  7. import: google.appengine.api.datastore  
  8. import: google.appengine.api.users  
  9.   
  10. transformers:  
  11. - kind: Greeting  
  12.   connector: csv  
  13.   connector_options:  
  14.     encoding: utf-8  
  15.     columns: from_header  
  16.   property_map:  
  17.     - property: Author  
  18.       external_name: Author  
  19.       import_transform: transform.none_if_empty(unicode)  
  20.     - property: Content  
  21.       external_name: Content  
  22.       import_transform: transform.none_if_empty(unicode)  
  23.     - property: Date  
  24.       external_name: Date  
  25.       import_transform: transform.import_date_time('%Y/%m/%d %H:%M:%S')  
  26.       export_transform: transform.export_date_time('%Y/%m/%d %H:%M:%S')  
transform.import_date_time() と transform.export_date_time() の文字列はstrptime用のフォーマット文字列
参考: Where are the reference pages of the Google App Engine bulkloader transform?


4 ダウンロードする
$ appcfg.py download_data --config_file=bulkloader.yaml --url=http://localhost:8080/_ah/remote_api --filename=download.csv --kind=Greeting

  1. $ cat download.csv   
  2. Content,Date,Author  
  3. "A,B,C",2015/02/09 03:36:21,test@example.com  
  4. fuga,2015/02/09 02:07:57,test@example.com  
  5. はろーわーるど,2015/02/09 03:21:49,test@example.com  
  6. hoge,2015/02/09 02:07:54,test@example.com  
  7. Hello World,2015/02/09 03:21:44,test@example.com  
  8. what's up,2015/02/09 03:36:01,test@example.com  
スペースや日本語があっても"がつかないが、データにカンマ(,)があると"がつくようだ。

毎回メールアドレスが聞かれるのがめんどいときは --email=EMAIL をつけるとよい