繁体   English   中英

无法使用BigQuery从Google Datastore检索JSON实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM