App Engine bulkloader - 使用父键加载实体?

时间:2014-02-05 05:20:04

标签: google-app-engine yaml bulkloader

关于使用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'

此时我只是迷失了方向。 发布链接最有可能无济于事。我可能已经看过所有这些但仍然无法理解。

提前致谢。

1 个答案:

答案 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>