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 Big Query 中的功能

Google Data Studio:将用户输入写回 Google Big Query 表

Google Big Query 的奇怪活动

如何在 Google Big Query 中总结月份?

如何将 Google Cloud SQL 与 Google Big Query 集成

将多行文本插入 Google Big Query