Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1
Posted
技术标签:
【中文标题】Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1【英文标题】:Google Big Query Error: CSV table encountered too many errors, giving up. Row: 1 errors: 1 【发布时间】:2016-04-13 00:33:57 【问题描述】:我正在尝试对 Google 大查询中加载的 12 GB csv 文件运行查询,但无法对数据集运行任何查询。我不确定数据集是否正确加载。它在窗格中显示为表格,但不存在于作业历史记录中。任何人都可以提供同样的帮助。
数据集是从谷歌存储桶中加载的,该存储桶有大约 1.2 毫米的记录和 3728 个变量
工作 ID:p-g-us-adv-x-dat-aia-proto-1:bquijob_b951879_1540d02c1a4
【问题讨论】:
代码和错误的图片远没有它们的文本有用。例如,未来的用户无法搜索这些图片,否则他们可能会发现您的问题或答案很有帮助。请edit 附上相关文字,以及可以证明问题的minimal reproducible example。 【参考方案1】:检查您的架构 - 您可能忘记包含其中一列的架构 - 这就是发生在我身上的事情!
【讨论】:
这就是我的情况,我认为 BQ 应该改进他们的错误信息以提供更多信息 补充您的答案,这也可能发生在数据类型不匹配的情况下。【参考方案2】:job.errors 包含作业的详细错误。
这似乎没有记录在任何地方,但您可以在源代码中看到它:https://googlecloudplatform.github.io/google-cloud-python/0.20.0/_modules/google/cloud/bigquery/job.html 和 _AsyncJob 的 ctrl+f。
所以您的 wait_for_job 代码可能如下所示:
def wait_for_job(job):
while True:
job.reload()
if job.state == 'DONE':
if job.error_result:
raise RuntimeError(job.errors)
return
time.sleep(1)
【讨论】:
非常有帮助。谢谢本!【参考方案3】:要获取有关错误的更多信息,请从 CLI 尝试以下操作:
>bq show -j <jobid>
它打印状态和/或详细的错误信息。
列出所有的jobid:
bq ls -j
【讨论】:
【参考方案4】:instructions in the GCP docs 之后我遇到了同样的问题。
第二个 bq load
失败了,但不是第一个。
我发现在 BigQuery 网络界面中选择 ignore unknown values
选项重复该作业。
我还没有发现数据有任何错误,但刚刚开始查看它。
【讨论】:
【参考方案5】:另一个技巧:如果您使用带有标题行的 csv 文件并希望使用定义的模式加载,您需要添加选项--skip_leading_rows=1
来提交命令(例如:bq load --skip_leading_rows=1 --source_format=CSV ...
)。
如果没有此选项,Bigquery 会将您的第一行(标题行)解析为数据行,可能会导致 TYPE MISMATCH ERROR(您定义的列架构是 FLOAT,但其列名是 STRING,bq load
命令将您的列名解析为 FLOAT 值)。
【讨论】:
【参考方案6】:我也遇到了同样的错误,但不知道实际问题。
<https://www.googleapis.com/bigquery/v2/projects/****/jobs/job_******?location=******> <
reason: invalid message: Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 115;
errors: 1. Please look into the errors[] collection for more details.
试过 bq --format=prettyjson show -j => 这也没有提供更多线索。
我尝试使用 SAP BODS 作为 ETL 工具将数据从数据库传输到 Big Query。为了找到根本原因,我必须修改 ETL 以逐列传输,即我首先传输一列,然后添加第二列,依此类推。初始字符串列的传输成功。但是当一个 FLOAT 列出现时,传输给出了同样的错误。
在检查数据时,我在数据库的小数列中发现值为 .0345。对于小于 1 的值,小数点前的 0 会被删除,这会导致在传输到 Big Query 时出错。
为了纠正,我不得不申请 BODS 的 to_decimal 转换。
to_decimal(column_name, '.', ',', 4)
"," 是千位分隔符
“。”是小数点分隔符
4 指定小数点后允许的个数
注意::我也在同时将记录传输到谷歌云存储,并且在转换之前也成功了。此外,当我手动使用 Cloud Storage 文件填充同一个 BigQuery 表时,它也可以正常工作。
【讨论】:
【参考方案7】:所以看起来您正在查询一个尚未加载到 BigQuery 中的 CSV 文件,它只是由位于 Google Cloud Storage 中的联合表指向。
基础 CSV 文件中似乎存在错误:
Too many value in row starting at position:11398444388 in file:gs://syntheticpopulation-storage/Alldatamerged_Allgrps.csv
Too many value in row starting at position:9252859186 in file:gs://syntheticpopulation-storage/Alldatamerged_Allgrps.csv
...
如果这足以诊断问题,请告诉我。如果您查看查询历史记录,我相信您可以将这些消息视为查询作业的警告。
我在内部提交了三个错误:
-
错误消息中的语法错误。
由于联合表中的问题导致的错误消息无法诊断,因为它们不会告诉您哪个表有问题。
联合表中的问题导致的错误消息在 UI 中不可操作,因为有关问题的信息在警告流中,不会显示。
【讨论】:
嗨乔丹.. 感谢您的回复。如何将此表加载到大查询平台。是否因为大小而没有加载(表已正确存储在存储桶中 - 检查它)。由于我上传了大小为 5GB 的表,并且正确提及了架构结构和数据类型,因此我想不出任何其他原因。你能建议一下吗? 如果尝试加载此 csv 文件的加载作业失败,您能否提供失败的加载作业的作业 ID 和错误消息? 在乔丹的评论中添加了图片/错误(加载错误) 查看文档中的加载数据:cloud.google.com/bigquery/loading-data-into-bigquery @JordanTigani 这个职位在这里有什么帮助?很容易得到一些失败的数据行。非常简单的用例是由于低质量错误消息而获取不必要的数据量。【参考方案8】:似乎是一个已知的错误@google。已经进行了修复,但没有将其推向生产。 https://code.google.com/p/google-bigquery/issues/detail?id=621
【讨论】:
【参考方案9】:在使用 beam.io.WriteToBigQuery(...) 将我的元素传递到 Bigquery 之前,我正在通过 beam.Map(print) 传递我的元素。删除它后,我的 BigQuery 上没有加载任何错误和文件。
【讨论】:
【参考方案10】:问题也可能源于 DATETIME 格式。该列的正确格式是“%Y-%m-%d %H:%M:%S”。除此之外的任何事情都会引发上述错误。
【讨论】:
以上是关于Google Big Query Error: CSV table 遇到太多错误,放弃。行:1 错误:1的主要内容,如果未能解决你的问题,请参考以下文章
Google Data Studio:将用户输入写回 Google Big Query 表