我在Google Big Query上投放了一些日志文件,并且已经有一个程序在大约7个月内完成。我们重建了这个网站,所以我创建了一个新表和一个几乎相同的过程。我可以从Google存储中批量上传旧文件,大多数文件都会加载而不会发生意外。然后,当我在cronjob中运行相同的程序时,BQ报告后端错误并且未加载数据。
该文件是gzip压缩并以制表符分隔。我正在使用Python gzip包。我相信我已经通过阅读原文正确预处理了这些文件,删除了所有没有正确数量字段的行(在这种情况下为476),然后编写并上传到谷歌存储。错误几乎总是发生在文件的末尾。同样奇怪的是,我为坏行设置了高容差,并设置了BQ以将所有字段读为字符串。它仍然没有加载。
Error loading table: {u'endTime': u'1373914994246',
u'load': {u'inputFileBytes': u'528384',
u'inputFiles': u'1',
u'outputBytes': u'0',
u'outputRows': u'4610'},
u'startTime': u'1373914986420'}
{u'errorResult': {u'location': u'Line:4612 / Field:1',
u'message': u'Error reading source file',
u'reason': u'backendError'},
u'errors': [{u'location': u'Line:4611 / Field:125',
u'message': u'Bad character (ASCII 0) encountered: field starts with: <1373339>',
u'reason': u'invalid'},
{u'location': u'Line:4612 / Field:1',
u'message': u'Error reading source file',
u'reason': u'backendError'}],
u'state': u'DONE'}
我从FTP下载文件,写入临时文件。然后我用local_file = gzip.open(fname, 'r')
打开该文件。然后我读它看看每行是476个字段,如果不是,我把它写在别处,如果是,我在本地写。 local_file.write(row)
。然后就像谷歌存储一样:
args = ['python','/path/to/gsutil/gsutil', 'cp', local_file, folder]
call(args)
答案 0 :(得分:1)
解压缩gzip文件时出错。解决方法可能是首先解压缩文件。我还在调查。