enter image description here我正在尝试对Google大查询中加载的12 GB csv文件运行查询,我无法对数据集运行任何查询。我不确定数据集是否正确加载。它在窗格中显示为一个表,但它不存在于作业历史记录中。任何人都可以提供同样的帮助。
数据集是从谷歌存储桶加载的,该存储桶有大约1.2MM的记录和3728个变量
职位编号:p-g-us-adv-x-dat-aia-proto-1:bquijob_b951879_1540d02c1a4
答案 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
...
如果这足以诊断问题,请告诉我。我相信如果查看查询历史记录,您可以在查询作业上看到这些消息作为警告。
我在内部提交了三个错误:
答案 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表时,它也可以正常工作。