Обновление данных с помощью массового загрузчика

Я использую скрипт python, загружаю некоторые данные на серверную часть моего движка приложения.

Вот его определение в bulkloader.yaml

- kind: Subcategory
  connector: csv
  connector_options:
    encoding: utf-8
  property_map:
    - property: __key__
      external_name: id
      export_transform: transform.key_id_or_name_as_string
      import_transform: transform.none_if_empty(int)

    - property: name
      external_name: name

    - property: categoryId
      external_name: categoryId    
      export_transform: transform.key_id_or_name_as_string
      import_transform: transform.none_if_empty(int) 

    - property: language
      external_name: language 

    - property: active
      external_name: active
      import_transform: bool

Проблема в том, что этот активный столбец динамически изменяется позже, и в следующий раз, когда я снова загружу те же данные, он будет заменен на false, потому что столбец не существует в csv.

Я попытался удалить столбец из загрузчика, но затем столбцы просто исчезли. Вероятно, это потому, что сущности заменяются, а не обновляются. Есть ли способ сохранить уже существующие столбцы без их замены / удаления при загрузке?


person Jacek Kwiecień    schedule 13.09.2014    source источник


Ответы (1)


К сожалению, нет простого способа объединить свойства с помощью массового загрузчика. Как вы заметили, он создает объекты на основе ваших данных CSV, затем сохраняет их с известными ключами, перезаписывая существующие объекты. Чтобы выполнить слияние, вам необходимо массово загрузить существующие сущности, выполнить слияние в своем наборе данных, а затем загрузить объединенные сущности.

Есть ловушки для выполнения причудливых вещей во время логики загрузчика, которые могут помочь реализовать инструмент слияния. См. Этот связанный вопрос SO: Объединить несколько столбцов в массовом загрузчике Но вам все равно нужно получить свойства для слияния из хранилища данных каким-либо образом. Хранилище данных не может выполнить слияние самостоятельно.

person Dan Sanderson    schedule 14.09.2014
comment
Я не уверен, что это поможет вам, так как это еще с 2010 года, но вот старая глава о массовом загрузчике из 1-го издания моей книги по App Engine: ae-book.appspot.com/chapters/bulkdata Это предшествует версии массового загрузчика, в которой используется bulkloader.yaml, но, возможно, это будет полезно. Я считаю, что массовый загрузчик сейчас обычно считается недокументированной функцией Python SDK. (Резервное копирование / восстановление по-прежнему поддерживается, но больше не зависит от утилиты массовой загрузки.) - person Dan Sanderson; 14.09.2014