从Google Cloud Storage加载csv文件时出现BigQuery错误

9
我试图将保存在 GCS 中的 csv 文件中的数据加载到 BigQuery 中。csv 文件采用 UTF-8 格式,包含 7 列。我已在数据方案中指定了这些列(全部为字符串且可为空),并检查了 csv 文件的内容,看起来很好。
但是,当我尝试加载数据时,出现以下错误:
“遇到太多错误(错误代码:invalid),gs://gvk_test_bucket/sku_category.csv: CSV 表格引用了第 1 列,但从位置 1750384 开始的行只包含 1 列(错误代码:invalid)。”
奇怪的是,该文件仅包含 680228 行。
当我勾选“允许不规则行”选项时,表格会生成,但只有第一列填满了整个逗号分隔的字符串。
请问有人能帮助我吗?
示例行:
“119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts,Long Sleeve Shirts”。

1
你检查过文件中的第1750384行吗?如果将允许的错误数量设置为1,它是否会加载?你能分享一行样本吗? - Graham Polley
是的,那一行是空的,文件只包含 680228 行。没有选项可以说文件包含多少行,对吧?我已经将数字设置为 1 然后再设置为 100,但是它会在另一行返回相同的错误。 - gvkleef
这是一个示例行:119470,时尚,时尚自有品牌,男装,其他男装品牌,正装衬衫,长袖衬衫 - gvkleef
最好通过编辑问题本身来澄清问题,而不是添加评论。在编辑器中将一行或两行复制/粘贴到代码示例中将非常有效。顺便说一句...上次我遇到这样的情况时,实际字段中有一个逗号,导致程序出现故障。 - Paulb
位置:1750384 表示字符号数量为 1750384,而不是行数。你可以使用 vscode-position 扩展在 VSCode 中跳转到该位置。 - kondziorf
显示剩余2条评论
4个回答

12

对我来说,问题在于存在换行符和回车符,尝试替换特殊字符。我使用下面的代码替换了这些字符,解决了加载部分的问题。

df= df.applymap(lambda x: x.replace("\r"," "))
df= df.applymap(lambda x: x.replace("\n"," "))

我使用lambda函数,因为在我的情况下我不知道哪一列是字符串。如果您确定了列,则可以逐列替换。

尝试替换字符,这对您也应该有效。


3

如果文件中没有分隔符,就不能有空行,否则BigQuery(以及几乎所有其他摄取引擎)将认为它只是一列。

例如,在第3行中出现一个空行将导致错误。

119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts,Long Sleeve Shirts

119471,Fashion,Fashion Own,Womenswear,Womensswear Brands Other,Formal Shirts,Long Sleeve Shirts

这将会成功:
119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts,Long Sleeve Shirts
,,,,,,,    
119471,Fashion,Fashion Own,Womenswear,Womensswear Brands Other,Formal Shirts,Long Sleeve Shirts

感谢您的评论。错误行号超过了我的Excel中的最大行号。因此,数据集中没有空行。看起来BQ在读取CSV文件中的最后一行后并不会停止读取数据。 - gvkleef
抱歉,我不明白你的意思。你是什么意思? - Graham Polley
例如,我的CSV文件包含80000行,但我在第81000行、82500行等处出现错误。 - gvkleef
所以,请修复那些缺少分隔符的行。 - Graham Polley
@gvkleef 我认为BigQuery的响应中存在一个错误。错误行号实际上是错误之前字符的数量。 - Marl

1
你有一个空行。
119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts

119472,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts

或者带引号的一行

119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts
"119471,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts"
119472,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts

我认为BigQuery的响应中存在错误。错误提示中的行号实际上是错误之前字符的数量。

这与我的答案有何不同? - Graham Polley
这个问题也涉及到错误指示的行号高于数据集中的总行数的事实。我试图给出更完整的回答,提供更多细节。 - Marl

0
在我的情况下,我遇到这个问题是因为最后一行数据之后有一个额外的空白行。尝试删除该额外行,应该就可以解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接