Java版のbulkloaderが出ると信じて待つこと1年以上、for businessもスベッてしまい、いまだその気配もなく。
痺れを切らして、普段 GAE/Jな私が、Python版のbulkloaderを使ってみました。
普段GAE/Jなので、スタートガイド Python 開発環境 / Google codeを参考に、環境作りからはじめます。
Pythonをインストール
Download – Pythonから手繰り、私の場合はWindows (未だにXPデス)なので、Windows x86 MSI Installer なんをインストールします。最新は2.7.2の様です。
Macなら最初から入っていますし、Linuxも大概のディストリビューションで最初から入っています。
Google App Engine SDK for Python をインストール
GAE/JなヒトでもPython版SDKを既に入れている方もいるかもしれませんが、入れてないヒトは入れましょう。
Google App Engine SDK のダウンロードから、Google App Engine SDK for Pythonをインストールします。最新は1.5.2でした。
とりあえずCドライブ直下に置きました。
インストールディレクトリは c:\appengine-python-sdk-1.5.2 となりました。
これを環境変数PATHに追加しときます。
GAE/J側の準備
既存プロジェクトの web.xmlを編集し、GAE/J側のRemoteApiServletを有効化?します。
<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>
勿論この後デプロイします。
設定ファイル (yaml) を作成
cmd.exe を起動し、appcfg.py で create_bulkloader_config を実行します。
cd c:\appengine-python-sdk-1.5.2 appcfg.py create_bulkloader_config --url=http://{appId}.appspot.com/remote_api --application={appId} --filename=config.yml
High Replicationの場合は、–application の引数のアタマに s~ をつけないといけないみたいです。
こんな風に。
cd c:\appengine-python-sdk-1.5.2 appcfg.py create_bulkloader_config --url=http://{appId}.appspot.com/remote_api --application=s~{appId} --filename=config.yml
自動生成されたconfig.yml には、そのとき appengine側に存在する kind のスキーマを反映したものになっているようです。
アップロード/ダウンロードするkindが限定されている場合などは、このymlファイルを編集して対象kindだけのymlファイルを作っても良い。
自動生成されたymlファイルは、TODO: の記述がいくつかあり、ココを適宜修正する必要があります。
最低でもconnector (と connector_options )を編集します。
connector: # TODO: Choose a connector here: csv, simplexml, etc... connector_options: # TODO: Add connector options here--these are specific to each connector. ↓ connector: csv connector_options: encoding: utf-8
CSVアップロード
ダウンロードするには、こんな感じ。
appcfg.py download_data --filename=test2.csv --config_file=test.yml --url=http://{appId}.appspot.com/remote_api --application=s~{appId} --kind={ClassNameOfKind} -v
アップロードはこんな感じ。
appcfg.py upload_data --filename=test.csv --config_file=test.yml --url=http://{appId}.appspot.com/remote_api --application=s~{appId} --kind={ClassNameOfKind} -v
参考にさせて頂いた先人の知恵
pomu0325: [GAE] bulkloaderをGAE/Jで使う
Javaプログラマの為のGAE/py bulkloader – GAE/py環境設定 – – 高卒文系プログラマの日常 by zetta1985