(Google App Engine) При загрузке Bulkloader создаются новые записи вместо обновления существующих.
Для своего проекта я использую хранилище данных GAE для хранения данных. В целях резервного копирования я решил использовать массовый загрузчик, который прекрасно загружает все данные в CSV-файл. Также загрузка загружает данные в порядке без ошибок.
Моя проблема в том, что при загрузке не обновляются существующие данные, а создаются дубликаты. Вот пример из просмотра хранилища данных:
До обновления:
ID/Name
id=18000
id=20001
После обновления:
ID/Name
id=18000
id=20001
name=18000
name=20001
В сущности хранилища данных я использую это как идентификатор данных:
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
Любая идея, как я могу на самом деле обновить существующие данные с Bulloader?
Спасибо адам
2 ответа
Настройки по умолчанию для Bulloader имеют неприятную привычку топтать типы значений. Это особенно проблема для ключей и списков.
Я использую эти вспомогательные функции bulk_helper и добавляю их в мой bulkloader.yaml:
python_preamble:
- import: bulk_helper
...
property_map:
- property: __key__
external_name: key
import_transform: bulk_helper.reverse_str_to_key
export_transform: bulk_helper.key_to_reverse_str
Это сохраняет полный ключ, включая информацию о роде и родителе, и делает его читаемым человеком (если это важно для вас).
Это прекрасно работает для меня:
import_transform: transform.create_foreign_key ('Kind', key_is_id = True)
Обнаружил ее здесь: проблема с загрузчиком в движке приложений Google при использовании автоматически сгенерированной конфигурации yaml и числовых идентификаторов
Благодарю.