我收到此错误 "错误:解析从位置开始的行时检测到错误:4824。错误:遇到错误字符(ASCII 0)。"
数据未压缩。
我的外部表指向多个CSV文件,其中一个包含具有该字符的几行。在我的表定义中,我添加了" MaxBadRecords",但这没有效果。在常规表中加载数据时,我也遇到了同样的问题。
我知道我可以使用DataFlow甚至尝试修复CSV,但有没有替代方案,不包括编写解析器,希望同样简单有效?
答案 0 :(得分:1)
是否有替代方案,不包括编写解析器,希望同样简单有效?
在Google Cloud SDK Shell(使用tr
实用程序)
gsutil cp gs://bucket/badfile.csv - | tr -d '\000' | gsutil cp - gs://bucket/fixedfile.csv
这将
获得新文件后 - 只需确保您的表格现在指向固定的文件
答案 1 :(得分:0)
有时会在文件中出现最后一个字节。
多亏了:
tr '\0' ' ' < file1 > file2
答案 2 :(得分:0)
您可以使用 python 或 PowerShell 等外部工具清理文件。无法在 bigquery 中加载任何带有 ASCII0 的文件
这是一个可以用python清除文件的脚本:
def replace_chars(self,file_path,orignal_string,new_string):
#Create temp file
fh, abs_path = mkstemp()
with os.fdopen(fh,'w', encoding='utf-8') as new_file:
with open(file_path, encoding='utf-8', errors='replace') as old_file:
print("\nCurrent line: \t")
i=0
for line in old_file:
print(i,end="\r", flush=True)
i=i+1
line=line.replace(orignal_string, new_string)
new_file.write(line)
#Copy the file permissions from the old file to the new file
shutil.copymode(file_path, abs_path)
#Remove original file
os.remove(file_path)
#Move new file
shutil.move(abs_path, file_path)
相同,但对于 PowerShell:
(Get-Content "C:\Source.DAT") -replace "`0", " " | Set-Content "C:\Destination.DAT"