Google bigquery 外部表和加载表时遇到Bigquery错误(ASCII 0)
我收到了这个错误Google bigquery 外部表和加载表时遇到Bigquery错误(ASCII 0),google-bigquery,Google Bigquery,我收到了这个错误 “错误:分析从位置4824开始的行时检测到错误。错误:遇到错误字符(ASCII 0)。” 数据没有被压缩。 我的外部表指向多个CSV文件,其中一个包含两行具有该字符的行。在我的表定义中,我添加了“MaxBadRecords”,但没有效果。在常规表中加载数据时,我也会遇到同样的问题。 我知道我可以使用DataFlow,甚至尝试修复CSV,但是有没有其他方法不包括编写解析器,并且希望同样简单高效 有没有一种替代方法不包括编写解析器,并且希望同样简单高效 在Google Cloud
“错误:分析从位置4824开始的行时检测到错误。错误:遇到错误字符(ASCII 0)。” 数据没有被压缩。 我的外部表指向多个CSV文件,其中一个包含两行具有该字符的行。在我的表定义中,我添加了“MaxBadRecords”,但没有效果。在常规表中加载数据时,我也会遇到同样的问题。
我知道我可以使用DataFlow,甚至尝试修复CSV,但是有没有其他方法不包括编写解析器,并且希望同样简单高效 有没有一种替代方法不包括编写解析器,并且希望同样简单高效 在Google Cloud SDK Shell中尝试以下内容(使用实用程序) 这将
有了新文件后,只需确保您的表现在指向那个固定的文件,有时文件中会出现最后一个字节 由于以下原因,替换它可能会有所帮助:
tr '\0' ' ' < file1 > file2
tr'\0'file2
您可以使用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"
看看其中一个是否有帮助:嗨,米哈伊尔。我有几个问题:如果旧文件和新文件的文件名相同怎么办?考虑到GCS bucket每小时都会与某个FTP服务器同步,所以同步过程会覆盖文件,我必须在之后运行该过程,那么它的速度会有多慢?我曾尝试使用sed命令,但由于每次同步时它都必须在所有文件上运行,因此速度非常慢,而且由于文件名相同,我收到一个错误,表示资源正忙,您只需尝试使用提取的ascii 0覆盖旧文件,然后看看它将如何为您工作:o)-请尝试。至于每小时一次的修复过程——老实说,我没有考虑过这种情况,因为我认为这只是一种坏文件的一次性情况——但您仍然可以尝试将修复过程作为与ftp同步的一部分(最后一步)。很难判断它会有多快/多慢,因为它取决于多个因素-同样,唯一的方法是尝试并试验您的文件,看看它是否会工作,但实际上,在考虑将此技巧作为每小时与ftp同步的一部分之前-我认为您应该首先检查此功能是否有效并解决此问题!你能试着确认一下吗?由于这主要是您问题的范围:o)对于较大的文件,这对我来说有点太慢了,所以我决定做避免的事情,我编写了一个数据流管道,从schema@Jordan-有道理!
(Get-Content "C:\Source.DAT") -replace "`0", " " | Set-Content "C:\Destination.DAT"