关于使用App Engine的bulkloader加载具有父键的实体的信息似乎很少。 我尝试按照StackOverflow上的说明进行操作......
Uploading Entity with Parent Using Bulkloader
但必须有一些我还没有得到的东西。 我希望你们都能帮忙。
我正在尝试加载新实体并为它们提供已存在于数据存储区中的实体的父键。 父实体基本上只是一个“管理”实体。我希望属于管理员的所有“Car”实体都拥有此父键。通过这种方式,我可以轻松搜索那些汽车。
admin.yml和admin.csv如下......(我正在跳过序言和“变形金刚”)
ADMIN.YML
- kind: Admin
connector: csv
property_map:
- property: __key__
external_name: adminKey
export_transform: transform.key_id_or_name_as_string
- property: email
external_name: email
ADMIN.CSV
email
foo@foo.com
这很好用。创建一个Admin实体。
现在我想使用此实体作为我接下来加载的“Car”实体的父实体。 car.yml和car.csv低于......(再次跳过序言和“变形金刚”)
CAR.YML
- kind: Car
connector: csv
property_map:
- property: __key__
external_name: carKey
import_transform: transform.create_deep_key(('adminKey', 'adminKey'),('carKey', transform.CURRENT_PROPERTY))
export:
- external_name: adminKey
export_transform: transform.key_id_or_name_as_string_n(0)
- external_name: carKey
export_transform: transform.key_id_or_name_as_string_n(1)
- property: manufacturer
external_name: manufacturer
- property: model
external_name: model
CAR.CSV
manufacturer,model
Chevrolet,Impala
Ford,Focus
每次我用car.csv运行car.yml时,都收到消息:
[ERROR] WorkerThread-0错误:'adminKey'
此时我只是迷失了方向。 发布链接最有可能无济于事。我可能已经看过所有这些但仍然无法理解。
提前致谢。
答案 0 :(得分:1)
正确的语法是transform.create_deep_key((kind, value),(kind, value),...)
你需要这样的东西:
transform.create_deep_key(('Admin', 'adminKey'),('Car', transform.CURRENT_PROPERTY))
^ ^ ^ ^
parent kind parent val child kind child val
然后你需要将adminKey添加到你的car.csv文件中 - 你的导出看起来会为导出现有实体创建正确的csv,但是为了导入新实体,你需要手动添加该列。 / p>