BigQuery limitations for loading data from Json中的一个是:
JSON data must be newline delimited
我有此代码:
def create_jsonlines(self, original):
if isinstance(original, str):
original = json.loads(original)
return '\n'.join([json.dumps(item) for _, item in original.items()])
这会将常规的压缩json写入Google Storage:
regular = prefix + '/regular.json.gz'
storage.Bucket('bucket').item(regular).write_to(gzip.compress(bytes((data),encoding='utf8')), 'application/json')
这会将常规的压缩json写入Google Storage:
newline = prefix + '/newline.json.gz'
storage.Bucket('bucket').item(newline).write_to(gzip.compress(bytes((self.create_jsonlines(data)),encoding='utf8')), 'application/json')
常规json是确定。它包含应有的一切。但是我不能真正使用它,因为BigQuery不支持这种格式。
换行json是不好。大量数据丢失。.显然我将其转换为错误。
data
是一个转储,如下所示:data = json.dumps(result, sort_keys=True)
如何修复create_jsonlines函数?