[英]Fail to retrieve JSON entity from Google Datastore using BigQuery
我正在尝试将实体从Google Data Store导出到Big Query(然后再导出为CSV)。
当我创建数据集时,除了一个应该是JSON的缺失变量之外,一切都很好。( ndb.JsonProperty()
)
在数据存储区中查看此实体变量,它似乎是一个编码的JSON(例如:... 0NzIyMDUyODkiLCAidXNlcl9uYW1lIjogIlZpbmNlbnQgR
...)
我唯一的目的是使用Big Query,Python或任何需要从数据存储区导出此实体,以便探索数据。
ndb JsonProperty值作为blob存储在数据存储区中:
JsonProperty Value是一个Python对象(例如列表或字典或字符串),可以使用Python的json模块进行序列化; Cloud Datastore将JSON序列化存储为blob。
BigQuery 丢弃blob数据 :
Blob BigQuery在加载数据时会丢弃这些值。
一种可能的解决方法是在模型上创建Computed Properties ,以BigQuery将接受的格式提取您感兴趣的数据。
例如,假设您在JsonProperty
中存储这样的dict
:
data = {'foo': 'bar', 'baz': 'quux'}
假设您对与密钥foo
相对应的值感兴趣。 您可以创建一个返回值的ComputedProperty
,这将由您的BigQuery导出拾取(请注意,必须在添加ComputedProperty
以填充新属性后保存所有模型实例)。
class MyModel(ndb.Model):
blob = ndb.JsonProperty()
foo = ndb.ComputedProperty(lambda self: self.blob.get('bar'))
obj = MyModel(blob=data)
obj.put()
obj.foo
'bar'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.