0

我在 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)
4

1 回答 1

1

There was an error decompressing the gzip file. A workaround may be to decompress the file first. I'm still investigating.

于 2013-07-15T21:22:18.967 回答