Google Big Query错误:CSV表遇到太多错误,放弃了。行:1个错误:1

时间:2016-04-13 00:33:57

标签: google-bigquery

enter image description here我正在尝试对Google大查询中加载的12 GB csv文件运行查询,我无法对数据集运行任何查询。我不确定数据集是否正确加载。它在窗格中显示为一个表,但它不存在于作业历史记录中。任何人都可以提供同样的帮助。

数据集是从谷歌存储桶加载的,该存储桶有大约1.2MM的记录和3728个变量

职位编号:p-g-us-adv-x-dat-aia-proto-1:bquijob_b951879_1540d02c1a4

8 个答案:

答案 0 :(得分:8)

检查您的架构 - 您可能忘记包含其中一个列的架构 - 这就是发生在我身上的事情!

答案 1 :(得分:3)

job.errors包含作业的详细错误。

这似乎没有记录在任何地方,但您可以在源代码中看到它:https://googlecloudplatform.github.io/google-cloud-python/0.20.0/_modules/google/cloud/bigquery/job.html和ctrl + f for _AsyncJob。

所以你的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)

答案 2 :(得分:1)

我在instructions in the GCP docs之后遇到了同样的问题。

第二个bq load失败了,但第一个失败了。

我发现在BigQuery Web界面中重复该作业,选择ignore unknown values选项。

我还没有发现任何数据错误,但只是开始查看它。

答案 3 :(得分:0)

所以看起来你正在查询尚未加载到BigQuery中的CSV文件,只是存在于Google云端存储中的联合表所指向它。

看起来基础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
...

如果这足以诊断问题,请告诉我。我相信如果查看查询历史记录,您可以在查询作业上看到这些消息作为警告。

我在内部提交了三个错误:

  1. 错误消息中的语法不佳。
  2. 源自联合表中的问题的错误消息无法诊断,因为它们不会告诉您哪个表存在问题。
  3. 联合表中的问题的错误消息在UI中无法操作,因为有关错误的信息位于警告流中,但未显示。

答案 4 :(得分:0)

似乎是@google的已知错误。已经完成了修复,但没有将其推向生产阶段。 https://code.google.com/p/google-bigquery/issues/detail?id=621

答案 5 :(得分:0)

要获取有关错误的更多信息,请从CLI尝试以下操作:

>bq show -j <jobid>

它会打印状态和/或详细的错误信息。

要列出所有Jobid,请执行以下操作: bq ls -j

答案 6 :(得分:0)

另一个技巧:如果您使用带有标题行的csv文件并希望以定义的模式加载,则需要添加选项--skip_leading_rows=1来提交命令(例如:bq load --skip_leading_rows=1 --source_format=CSV ...)。

如果没有此选项,Bigquery会将第一行(标题行)解析为数据行,可能会导致TYPE MISMATCH ERROR(您定义的列架构为FLOAT,但其列名称为STRING和{{1} }命令将您的列名解析为FLOAT值。

答案 7 :(得分:0)

我也遇到了同样的错误,却不知道实际的问题。

<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工具将数据从数据库传输到大查询。为了找到根本原因,我必须修改ETL以逐列传输,即我首先传输了一个列,然后添加了第二列,依此类推。初始字符串列的传输成功。但是,当FLOAT列出现时,传输产生了相同的错误。

当检查数据时,我在数据库的十进制列中发现值为.0345。对于小于1的值,在小数点前删除了0,这会导致在传输到Big Query时出错。

要纠正,我必须对BODS进行to_decimal转换。

to_decimal(column_name, '.', ',', 4) 

“,”是千位分隔符

”。是小数点分隔符

4指定小数点后允许的数字

注意::我也正在同时将记录传输到Google Cloud Storage,并且在转换之前也取得了成功。另外,当我手动使用Cloud Storage文件填充相同的BigQuery表时,它也可以正常工作。