【问题标题】:BigQuery error when loading csv file from Google Cloud Storage从 Google Cloud Storage 加载 csv 文件时出现 BigQuery 错误
【发布时间】:2017-07-12 09:57:13
【问题描述】:

我正在尝试将保存在GCS 中的csv 文件的数据加载到BigQuery 中。 csv 文件采用UTF-8 格式,包含 7 列。我已经在数据方案中指定了这些列(所有字符串和可为空),并且我检查了 csv 文件的内容,看起来不错。

当我尝试加载数据时,出现以下错误:

遇到的错误太多。 (错误代码:无效) gs://gvk_test_bucket/sku_category.csv:CSV 表引用列 位置 1,但从位置开始的行:1750384 仅包含 1 列。 (错误代码:无效)

奇怪的是该文件只包含 680228 行。

当我检查allow jagged lines 选项时,表格正在生成,但只有第一列填充了整个逗号分隔的字符串。

有人可以帮我吗?

示例行

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

【问题讨论】:

  • 您检查过文件中的第 1750384 行吗?如果将允许的错误数设置为 1,它会加载吗?你能分享一个示例行吗?
  • 是的,该行是空的,该文件仅包含 680228 行。没有选项可以说明文件包含多少行,对吗?我已将数字设置为 1,然后设置为 100,但随后它将为另一行返回相同的错误。
  • 这是一个示例行:119470,Fashion,Fashion Own,Menswear,Menswear Brands Other,Formal Shirts,Long Sleeve Shirts
  • 在这种情况下,最好通过编辑问题本身来澄清问题,而不是添加 cmets。在编辑器中将一行或两行剪切/粘贴到 代码示例 中会很好地工作。顺便说一句.. 上一次这样的事情发生在我身上时,我在实际领域中有一个逗号,这使作品变得混乱。
  • 感谢您的评论。我已将允许的错误数设置为 1000000000,然后表中将填充数据。有没有办法避免在最后一条记录之后出现空行错误?此外,我还看到,即使 Allow Quoted Newlines 设置为 true,包含逗号的引用值也不包含在表中。

标签: csv google-bigquery google-cloud-storage


【解决方案1】:

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

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

我使用了 lambda 函数,因为我不知道在我的情况下哪一列是字符串。如果您确定列,请明智地替换其列。

尝试替换字符,它也对你有用。

【讨论】:

    【解决方案2】:

    您的文件中不能有没有分隔符的空行,否则 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 中的最后一行之后并没有停止读取数据。
    • 对不起,我没有关注你。什么意思?
    • 例如,我的 csv 包含 80000 行,我在第 81000、82500 行等处出现错误。
    • 所以,如果您缺少分隔符,请修复这些行。
    • @gvkleef 我认为 BigQuery 响应中存在错误。错误中的行号实际上是错误之前的字符数。
    【解决方案3】:

    你要么有一个空行

    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 响应中存在错误。错误中的行号实际上是错误之前的字符数。

    【讨论】:

    • 这与我的回答有何不同?
    • 问题还在于错误表明行数高于数据集中的总行数。我试图给出更完整的回复,提供更多细节。
    【解决方案4】:

    就我而言,由于最后一行数据后有一个额外的空白行,我遇到了这个问题。尝试删除多余的行,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2014-09-18
      • 2018-04-22
      相关资源
      最近更新 更多