读取数据时出错,错误消息:CSV 表引用列位置 174,但从位置开始的行:136868 仅包含 94 列
Posted
技术标签:
【中文标题】读取数据时出错,错误消息:CSV 表引用列位置 174,但从位置开始的行:136868 仅包含 94 列【英文标题】:Error while reading data, error message: CSV table references column position 174, but line starting at position:136868 contains only 94 columns 【发布时间】:2020-09-07 04:33:17 【问题描述】:我正在尝试将数据从 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 的脚本进行一些更改
【问题讨论】:
能否请您检查一下 Bigquery 中将如何处理 NULL IF 字段?如果您共享示例数据,那就太好了 嗨 - 两个进程中的哪一个失败了:从 Snowflake 卸载还是加载到 BQ?假设它是加载到 BQ 中,并且有多个文件,它是在第一个/每个文件上出错还是在特定文件上出错?您能否在 Excel 或 Notepad++ 等应用程序中打开该文件并查看问题所在? 嗨@SaivarmaMantena,我已将答案发布为社区维基。因此,如果我的回答解决了您的问题,请考虑支持并接受它。如果没有,请告诉我,以便改进答案。接受答案也将有助于社区成员的研究。 【参考方案1】:正如您在评论中所说,使用以下命令解决了问题:
bq load --noreplace --field_delimiter="|" --null_marker=NULL --allow_quoted_newlines=TRUE --allow_jagged_rows=TRUE
【讨论】:
【参考方案2】:根据错误消息,我会说问题出在命令行上:
bq load --noreplace --field_delimiter="|" hty-ttw-analysis:out.FF_TBL_UNLOAD $line
根据this 和this 其他问题,当正在加载的数据出现问题时会显示此错误消息,即 BigQuery 无法正确解析或映射到您要填充的表。因此,解决方案似乎是在运行此命令之前为 CSV 数据添加验证/清理步骤,这样就不会破坏 BigQuery 负载。
正如社区的其他成员所指出的那样,为了更好地了解数据可能存在的问题,可以重现错误消息的示例数据会很有帮助。
【讨论】:
感谢您的回复。这个命令对我有用 'bq load --noreplace --field_delimiter="|" --null_marker=NULL --allow_quoted_newlines=TRUE --allow_jagged_rows=TRUE'以上是关于读取数据时出错,错误消息:CSV 表引用列位置 174,但从位置开始的行:136868 仅包含 94 列的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:标记数据时出错。 C 错误:读取 1GB CSV 文件时字符串中的 EOF 开始
读取 csv 文件时出错(unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义 [重复]