我遇到了类似的问题,试图在 BigQuery 中加载一个压缩文件(将其保存在 Google Cloud Storage 中)。这些是日志:
文件:0 / 偏移量:4563403089 / 行:328480 / 字段:21:遇到错误字符(ASCII 0):字段开头为:(错误代码:无效)
文件:0 / 偏移量:4563403089 / 行:328485 / 字段:21:遇到错误字符(ASCII 0):字段开头为:(错误代码:无效)
文件:0 / 偏移量:4563403089 / 行:328490 / 字段:21:遇到错误字符(ASCII 0):字段开头为:(错误代码:无效)
文件:0 / 偏移量:4563403089 / 行:328511 / 字段:21:遇到错误字符(ASCII 0):字段开头为:(错误代码:无效)
文件:0 / 偏移量:4563403089 / 行:328517 / 字段:21:遇到错误字符(ASCII 0):字段开头为:(错误代码:无效)
为了解决这个问题,我所做的是从压缩文件中删除 ASCII 0 字符。为此,我从安装了 sdk 的 Compute Engine 实例中执行了以下命令:
gsutil cp gs://bucket_987234/compress_file.gz - | 枪弹 | tr -d '\000' | gsutil cp - gs://bucket_987234/uncompress_and_clean_file
通过使用管道,我避免了将所有存储都放在硬盘上(1G 压缩 + 52G 解压缩)。第一个程序从 Storage 中获取压缩文件,第二个程序将其解压缩,第三个程序删除 ASCII 0 字符,第四个程序将结果上传到 Storage。
当我再次上传到存储时,我不会压缩结果,因为 BigQuery 加载未压缩文件的速度更快。之后,我可以毫无问题地在 BigQuery 上加载数据。