读取数据时出错,错误消息:CSV表引用列位置174,但是从位置:136868开始的行仅包含94列

问题描述

我正在尝试将数据从SNowflake卸载到GCS,然后再将GCS卸载到bq表。 这是从雪花中卸载数据的代码

```copy into @unload_stage/FF_TBL_UNLOAD20200906.csv.gz from 
(
select * 
from SF_DB.SF_TBLS.FF_TBL_UNLOAD
)
file_format = (
  type=csv compression='gzip' 
  FIELD_DELIMITER = '|' 
  field_optionally_enclosed_by='"' 
  NULL_IF=()
  EMPTY_FIELD_AS_NULL = TRUE 
)
single = false
max_file_size=5300000000 
header = false;```

然后我使用以下脚本将数据从GCS复制到bq

```#!/bin/bash
date=20200906

echo "Removing FF_TBL_UNLOAD list with same date list...."

rm /home/varma/FF_TBL_UNLOADlist"$date".txt

echo "Listing FIlenames for FF_TBL_UNLOAD in GCS BUCKET...."

gsutil ls gs://syw_hs_inbound_outbound_data/FF_TBL_UNLOAD"$date"*.gz>>/home/varma/FF_TBL_UNLOADlist"$date".txt

echo "Starting Uploading  Data into table from FF_TBL_UNLOAD$date list..."
if [ -s /home/varma/FF_TBL_UNLOADlist"$date".txt ]
then
        while IFS= read -r line
        do
                echo "Uploading data for file $line"
        bq load --noreplace --field_delimiter="|" hty-ttw-analysis:out.FF_TBL_UNLOAD $line
        done < "/home/varma/FF_TBL_UNLOADlist${date}.txt"

else
        echo "File is Empty"

fi```

它适用于除此表以外的所有表,我得到的错误是 读取数据时出错,错误消息:CSV表引用列位置174,但是从位置:136868开始的行仅包含94列。

有人可以帮助我解决错误吗?我应该更改文件格式还是应该对要上传到bq的脚本进行一些更改

解决方法

基于错误消息,我会说问题出在命令行上:

bq load --noreplace --field_delimiter="|" hty-ttw-analysis:out.FF_TBL_UNLOAD $line

根据this以及另外this个其他问题,当正在加载的数据存在问题,即BigQuery无法正确解析或映射到您想要的表时,会显示此错误消息填充。因此,解决方案似乎是在运行此命令之前为CSV数据添加一个验证/清除步骤,从而不会破坏您的BigQuery负载。

如社区的其他成员所指出的那样,为了更好地了解数据可能是什么问题,可以重现错误消息的示例数据将大有帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...