无法使用BigQuery从Google数据存储中检索JSON实体



我正在尝试将实体从Google Data Store导出到大查询(然后是CSV(。

当我创建数据集时,除了一个应该是JSON的丢失变量外,一切都可以正常。(ndb.JsonProperty()(

在数据存储中查看此实体变量,它似乎是编码的JSON(例如:... 0NzIyMDUyODkiLCAidXNlcl9uYW1lIjogIlZpbmNlbnQgR ...(

我唯一的目的是使用大查询,python或其他任何需要从数据存储中导出该实体,以探索数据。

ndb jsonproperty值以blobs的形式存储在数据存储中:

JSONPROPERTY 值是使用Python的JSON模块序列化的Python对象(例如列表或DICS或字符串(;云数据存储将JSON序列化存储为斑点。

bigquery丢弃斑点数据:

blob 加载数据时丢弃这些值。

一种可能的解决方法是在模型上创建计算的属性,以提取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'

最新更新