2

データをBigQueryに読み込もうとしていますが、読み込みジョブは無期限に保留状態のままです(約5分待ちました)。ジョブを実行状態に移行するために他に何かする必要がありますか?

log.log(new LogRecord(Level.INFO, "Writing to big query table"));
JobConfigurationLoad loadConf = new JobConfigurationLoad();
loadConf.setDestinationTable(new TableReference().setProjectId(PROJECT_ID)
    .setDatasetId(datasetId).setTableId(TABLE_ID));
loadConf.setWriteDisposition("WRITE_APPEND");
loadConf.setSourceUris(Arrays.asList("gs://" + bucket + "/" + "something.json"));
JobConfiguration configuration = new JobConfiguration().setLoad(loadConf);
Job loadJob = new Job().setConfiguration(configuration);
Jobs.Insert insertData = bigQuery.jobs().insert(PROJECT_ID, loadJob);
Job insertResp = insertData.execute();

JobStatus status = insertResp.getStatus();
    while (!status.getState().equals("done")) {
        System.out.println(status.getState());
        status = insertResp.getStatus();
        Thread.sleep(10000);
}
...
4

2 に答える 2

1

私はこれをいくらか掘り下げましたが、問題は、同じテーブルに2300のインポートジョブを実行し、数秒ごとに新しいジョブを追加したことです。新しいジョブが処理可能よりも早く到着したため、ジョブはキューに入れられ始めました。これにより、保留時間がますます長くなりました。すべてのジョブが同じファイルを同じテーブルにインポートしているように見えたため、多数のジョブが意図的ではなかったようです。ちなみに、ジョブはすべてinvalid_valueエラーで失敗しました。

このパターンは12/20にのみ発生したことに注意してください。この日付以外に、あなたが実行した10分以上続くジョブは見つかりませんでした。

于 2013-01-02T23:40:33.413 に答える
1

最新のジョブ結果が得られないという問題に関しては、このコードは機能するはずです(上記に追加した場合:

// Insert the load job.
Job job = insertData.execute();  
JobId jobId = job.getJobId();

long startTime = System.currentTimeMillis();

while (!job.getStatus().getState().equals("DONE")) {
   // Pause execution for ten seconds before polling job status again
   Thread.sleep(10000);

   long elapsedTime = System.currentTimeMillis() - startTime;
   System.out.format("Job status (%dms) %s: %s\n", elapsedTime,
       jobId.getJobId(), job.getStatus().getState());       

   // Poll the server for job completion state.
   job = bigquery.jobs().get(projectId, jobId).execute();
}
if (job.getStatus().getErrorResult() != null) {
  // The job ended with an error.
  System.out.format("Job %s ended with error %s", job.getJobId(), 
      job.getStatus().getErrorResult().getMessage());
}
于 2013-01-04T16:05:34.650 に答える