属性 具有 INDEX_VALUE 的含义,但预计不会有任何含义
Property has meaning INDEX_VALUE, but is not expected to have any meaning
我在尝试从云备份加载数据时收到来自 BigQuery 的错误。
来自 Google BigQuery 控制台
Errors:
query: Property established_year of type integer has meaning INDEX_VALUE, but is not expected to have any meaning. (error code: invalidQuery)
Job ID: csgapi:bquijob_736ab47b_156b2f2a4f8
我在错误所引用的模型中进行了查找,它的类型为 ndb.IntegerProperty。然后,当我查看 ndb.IntegerProperty 扩展的 属性 class 时,我看到一条评论,其中设置了 new_p.set_meaning(entity_pb.Property.INDEX_VALUE)
(Docs here)。
# Projected properties have the INDEX_VALUE meaning and only contain
# the original property's name and value.
我的 ndb.IntegerProperty 类型的 属性 如何设置此 INDEX_VALUE?我必须如何解决此问题?
编辑
进一步研究,我很好奇为什么 属性 甚至被包含在这个项目中。根据模型,我有两个元素可能是有问题的属性。第一个 属性 是公司,它是一个 NDB.KeyProperty,这似乎不太可能,因为这只会创建一个参考。另一个是 Generic 属性、company_base,它没有索引,也映射到查询;这不会保存到数据存储中。对于这种特定类型,我们有 14 GB 的数据。我试图遍历备份中的所有元素以搜索字段 company_base,但我无法找到文件中的元素。
我看过其他使用相同结构的类型,但它们的模式在其模式中似乎并不相同 "company_base"。他们也不应该将该元素保存到数据存储区。
如果元素出现在备份架构中,这是否意味着在某个时间点这些非索引属性被保存到数据存储中并因此出现在备份中?
来自备份架构的通用字段 "company_base":
field {
name: "company_base"
type {
is_list: false
embedded_schema {
kind: "Company"
field {
name: "ambest_outlook"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "name_full"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "established_year"
type {
is_list: false
primitive_type: INTEGER
}
}
field {
name: "ambest_rating"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "parent_company"
type {
is_list: false
primitive_type: REFERENCE
}
}
field {
name: "sp_rating"
type {
is_list: false
primitive_type: STRING
}
}
}
}
}
史密斯
在架构中,虽然它只会出现在整个备份中,但出现了一个类型错误的元素。由于 NDB 的结构,通常不会出现。我能够解决此问题的唯一方法是导航实体并删除有问题的属性以确保正确性。
系统迭代修复了很长时间,但它们不是可搜索的项目。
我在尝试从云备份加载数据时收到来自 BigQuery 的错误。
来自 Google BigQuery 控制台
Errors:
query: Property established_year of type integer has meaning INDEX_VALUE, but is not expected to have any meaning. (error code: invalidQuery)Job ID: csgapi:bquijob_736ab47b_156b2f2a4f8
我在错误所引用的模型中进行了查找,它的类型为 ndb.IntegerProperty。然后,当我查看 ndb.IntegerProperty 扩展的 属性 class 时,我看到一条评论,其中设置了 new_p.set_meaning(entity_pb.Property.INDEX_VALUE)
(Docs here)。
# Projected properties have the INDEX_VALUE meaning and only contain
# the original property's name and value.
我的 ndb.IntegerProperty 类型的 属性 如何设置此 INDEX_VALUE?我必须如何解决此问题?
编辑
进一步研究,我很好奇为什么 属性 甚至被包含在这个项目中。根据模型,我有两个元素可能是有问题的属性。第一个 属性 是公司,它是一个 NDB.KeyProperty,这似乎不太可能,因为这只会创建一个参考。另一个是 Generic 属性、company_base,它没有索引,也映射到查询;这不会保存到数据存储中。对于这种特定类型,我们有 14 GB 的数据。我试图遍历备份中的所有元素以搜索字段 company_base,但我无法找到文件中的元素。
我看过其他使用相同结构的类型,但它们的模式在其模式中似乎并不相同 "company_base"。他们也不应该将该元素保存到数据存储区。
如果元素出现在备份架构中,这是否意味着在某个时间点这些非索引属性被保存到数据存储中并因此出现在备份中?
来自备份架构的通用字段 "company_base":
field {
name: "company_base"
type {
is_list: false
embedded_schema {
kind: "Company"
field {
name: "ambest_outlook"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "name_full"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "established_year"
type {
is_list: false
primitive_type: INTEGER
}
}
field {
name: "ambest_rating"
type {
is_list: false
primitive_type: STRING
}
}
field {
name: "parent_company"
type {
is_list: false
primitive_type: REFERENCE
}
}
field {
name: "sp_rating"
type {
is_list: false
primitive_type: STRING
}
}
}
}
}
史密斯
在架构中,虽然它只会出现在整个备份中,但出现了一个类型错误的元素。由于 NDB 的结构,通常不会出现。我能够解决此问题的唯一方法是导航实体并删除有问题的属性以确保正确性。
系统迭代修复了很长时间,但它们不是可搜索的项目。