GAE/J で Python の bulkloader をつかってみる


 
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

きのふよりけふ、けふよりあした  未分類

CSVファイルのデータをアップロードする方法 – 気楽に開発メモ

Using the bulkloader with Java App Engine – Ikai Lan says