0

アプリ エンジンを使用しbulkloaderて CSV ファイルをデータストアにインポートしています。1 つにマージしたい列がいくつかあります。たとえば、それらはすべて URL ですが、すべてが提供されているわけではなく、代わりの順序があります。

url_main
url_temp
url_test

私が言いたいのは、「OK、url_main存在する場合はそれを使用し、そうでない場合はユーザーurl_testを使用してから使用するurl_temp

したがって、列を参照し、条件に基づいてそれらを 1 つにマージするカスタム インポート変換を作成することは可能ですか?

4

1 に答える 1

2

わかりましたので、 https://developers.google.com/appengine/docs/python/tools/uploadingdata#Configuring_the_Bulk_Loaderを読んだ後、import_transformカスタム関数を使用できることを学びました。

それを念頭に置いて、これは私に正しい道を示しました:

... キーワード引数 bulkload_state を持つ 2 つの引数の関数。これにはエンティティに関する有用な情報が返されます。bulkload_state.current_entity は現在処理中のエンティティです。bulkload_state.current_dictionary、現在のエクスポート ディクショナリ ...

そこで、2 つの変数を処理する関数を作成しました。1 つはvalue現在のエンティティの で、もう 1 つはbulkload_state現在の行をフェッチできるようにする変数です。次のようにします。

def check_url(value, bulkload_state):
    row = bulkload_state.current_dictionary
    fields = [ 'Final URL', 'URL', 'Temporary URL' ]

    for field in fields:
        if field in row:
            return row[ field ]


    return None

これは、現在の行 ( bulkload_state.current_dictionary) を取得して、どの URL フィールドが存在するかをチェックするだけです。存在しない場合は、単に を返しますNone

私の場合、次のbulkloader.yamlように設定するだけでこの関数を呼び出します。

- property: business_url
  external_name: URL
  import_transform: bulkloader_helper.check_url

注:external_name実際に使用していない限り存在する限り、問題ではありません。複数の列を使用しています。

シンプル!

于 2012-06-29T14:19:58.793 に答える