5

データストアにアップロードする必要がある約 4000 のレコードがあります。

現在、CSV 形式になっています。誰かが私を指摘したり、GAEにデータを一括アップロードする方法を説明したりしていただければ幸いです。

4

4 に答える 4

6

bulkloader.pyツールを使用できます。

Python SDK に含まれている bulkloader.py ツールを使用すると、アプリケーションのデータストアにデータをアップロードできます。少し設定するだけで、CSV ファイルから新しいデータストア エンティティを作成できます。

于 2009-04-12T11:29:27.710 に答える
3

完璧な解決策はありませんが、 App Engine Consoleを試してみることをお勧めします。App Engine コンソールは、本番環境でインタラクティブな Python インタープリターを実行できる無料のプラグインです。いくつかの理由から、1 回限りのデータ操作 (初期データのインポートなど) に役立ちます。

  1. これは古き良き read-eval-print インタープリターです。完璧なインポート コードを一度にすべて記述してバッチで実行する代わりに、一度に 1 つずつ実行できます。
  2. 独自のデータ モデルにインタラクティブにアクセスできるため、データ ストアからオブジェクトを読み取り/更新/削除できます。
  3. URL Fetch API にインタラクティブにアクセスできるため、データを 1 つずつ取得できます。

次のようなことをお勧めします。

  1. 開発環境でデータ モデルを機能させる
  2. CSV レコードを 1,000 未満のチャンクに分割します。それらを Amazon S3 やその他の URL などの場所に公開します。
  3. プロジェクトに App Engine コンソールをインストールし、本番環境にプッシュします
  4. コンソールにログインします。(管理者のみがコンソールを使用できるので、安全を確保する必要があります。HTTP 404 を返すように構成して、許可されていないユーザーから「クローク」することもできます。)
  5. CSV の各チャンクについて:
    1. URLFetch を使用してデータのチャンクをプルダウンする
    2. 組み込みcsvモジュールを使用して、有用なデータ構造のリスト (おそらくリストのリストまたはそのようなもの) が得られるまで、データを切り刻みます。
    3. forリスト内の各データ構造を反復するループ を作成します。
      1. すべての正しいプロパティを持つデータ オブジェクトを作成する
      2. put() データストアに入れます

#5 までの 1 回の反復の後、コピーして貼り付けるか、単純な関数を記述してインポート タスクを高速化できることがわかります。また、ステップ 5.1 と 5.2 でデータを取得して処理することで、データが完璧であることを確認するまで時間をかけてもかまいません。

(注: 現在、App Engine コンソールは Firefox で最適に動作します。 )

于 2009-05-03T10:48:15.793 に答える
2

複数のエンティティでリモート API と操作を使用する。Python を使用した NDB の例を示します。Test.csv には、セミコロンで区切られた次の値が含まれています。

1;2;3;4
5;6;7;8

まず、モジュールをインポートする必要があります:

import csv
from TestData import TestData
from google.appengine.ext import ndb
from google.appengine.ext.remote_api import remote_api_stub

次に、リモート API スタブを作成する必要があります。

remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func, 'your-app-id.appspot.com')

リモート API の使用の詳細については、この回答をご覧ください。

次に、基本的に次のことを行うメイン コードが続きます。

  1. Test.csv ファイルを開きます。
  2. 区切り文字を設定します。セミコロンを使用しています。
  3. 次に、エンティティのリストを作成するための 2 つの異なるオプションがあります。
    1. map reduce 関数の使用。
    2. リスト内包表記の使用。
  4. 最後に、エンティティのリスト全体をバッチで配置します。

メインコード:

# Open csv file for reading.
with open('Test.csv', 'rb') as file:
    # Set delimiter.
    reader = csv.reader(file, delimiter=';')

    # Reduce 2D list into 1D list and then map every element into entity.
    test_data_list = map(lambda number: TestData(number=int(number)),
            reduce(lambda list, row: list+row, reader)
        )

    # Or you can use list comprehension.
    test_data_list = [TestData(number=int(number)) for row in reader for number in row]

    # Batch put whole list into HRD.
    ndb.put_multi(test_data_list)

put_multi 操作は、単一の HTTP POST 要求で適切な数のエンティティを確実にバッチ処理することにも注意を払います。

詳細については、このドキュメントをご覧ください。

于 2013-02-02T19:44:03.863 に答える
0

App Engine SDK の新しいバージョンは、appcfg.py を使用してアップロードできます。

appcfg.pyを参照してください

于 2009-07-04T06:21:12.710 に答える