Google bigquery 确定加载作业的实际错误

Google bigquery 确定加载作业的实际错误,google-bigquery,Google Bigquery,使用JavaSDK,我正在为一条具有相当复杂模式的记录创建一个加载作业。监视加载作业的状态时,需要花费惊人的长时间(但这可能是由于制定了模式),但随后会说: 11:21:06.975 [main] INFO xxx.GoogleBigQuery - Job status (21694ms) create_scans_1384744805079_172221126: DONE 11:24:50.618 [main] ERROR xxx.GoogleBigQuery - Job create_s

使用JavaSDK,我正在为一条具有相当复杂模式的记录创建一个加载作业。监视加载作业的状态时,需要花费惊人的长时间(但这可能是由于制定了模式),但随后会说:

11:21:06.975 [main] INFO  xxx.GoogleBigQuery - Job status (21694ms) create_scans_1384744805079_172221126: DONE

11:24:50.618 [main] ERROR xxx.GoogleBigQuery - Job create_scans_1384744805079_172221126  caused error (invalid) with message
Too many errors encountered. Limit is: 0.
11:24:50.810 [main] ERROR xxx.GoogleBigQuery - {
  "message" : "Too many errors encountered. Limit is: 0.",
  "reason" : "invalid"
?}
顺便问一下,我如何告诉作业使用Java可以有超过零的错误

这个加载作业不会出现在控制台中最近的作业列表中,而且据我所见,没有任何Java对象包含有关遇到的实际错误的更多详细信息。那么,我如何从语法上找出问题所在呢?我只能找到:

        if (err != null) {

            log.error("Job {} caused error ({}) with message\n{}", jobID, err.getReason(), err.getMessage());
            try {

                log.error(err.toPrettyString());
            }
        ...
总的来说,我很难为其中一些东西找到好的文档,我正在通过反复试验以及在这里和以前的小组中找到的简短代码片段来解决这些问题。如果有比《入门指南》更好的信息来源,那么我将非常感谢任何指向该信息的指针。Javadoc并没有真正的帮助,我找不到任何完整的加载、查询、错误测试、编目错误等示例

此作业通过新行分隔的JSON记录提交,该记录通过以下方式提供给作业:

InputStream dummy = getClass().getResourceAsStream("/googlebigquery/xxx.record");
final InputStreamContent jsonIn = new InputStreamContent("application/octet-stream", dummy);
createTableJob = bigQuery.jobs().insert(projectId, loadJob, jsonIn).execute();
我的身份验证等似乎可以作为单独的Java代码正确地列出项目,并且项目中的数据集都可以正常工作。因此,我只需要帮助确定实际错误是什么——它是否喜欢模式(例如,我在记录中嵌套了记录),或者它是否认为我提交的数据中存在错误


提前感谢您的帮助。上面引用的作业编号是一个实际失败的加载作业,如果这有助于任何可能阅读此内容的谷歌员工的话。

听起来你有几个问题,所以我将尝试解决所有问题

首先,获取失败作业的状态的方法是调用jobs().get(jobId),它返回一个作业对象,该作业对象包含一个errorResult对象,该对象包含导致作业失败的错误(例如,“错误太多”)。errorStream列表是作业中所有错误的列表,它应该告诉您哪些行遇到错误

注意:如果您有作业id,使用bq查找作业可能会更容易——您可以运行
bq show
来获取作业错误信息。如果添加
--format=prettyjson
,它将打印作业中的所有信息

一个提示,您可能还需要考虑在创建作业时提供您自己的作业ID。然后,即使在启动作业时出现错误(即插入()调用失败,可能是由于网络错误),您可以查找该作业来查看实际发生了什么。


要告诉BigQuery在导入过程中允许出现某些错误,可以在加载作业中使用
maxBadResults
设置。请参阅。

谢谢您的回答。我确实提供了我自己的作业id(您可以在上面的状态日志输出中看到),并且我确实监视作业并获取状态。。但是我不知道你提到的错误流在哪里。final ErrorProto err=pollJob.getStatus().getErrorResult();不会生成包含错误流的对象。但我确实解决了如何更改最大错误:).Ah:final List errList=pollJob.getStatus().getErrors();我想这可能已经改变了,我必须用
-j
开关运行
bq show--format=prettyjson-j
,才能让bq显示作业。如果您省略了
-j
,那么bq似乎默认为在默认项目中需要一个数据集。感谢您提供关于传递我自己的工作id的提示。您是否建议允许大量
maxBadResults
并在以后查看错误?如果在引发的错误中很容易显示
错误
列表,而不仅仅是
错误结果
,那就太好了。如何捕获异常并记录错误,然后应用程序继续?很难找到这样的代码示例