2013-03-24 40 views
2

我得到一個400錯誤的請求錯誤:400錯誤的請求錯誤嘗試加載從雲儲存BigQuery資料表

在線程異常「主要」 com.google.api.client.googleapis.json.GoogleJsonResponseException:400錯誤的請求

{ 
    "code" : 400, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Bad Request", 
    "reason" : "badRequest" 
    } ], 
    "message" : "Bad Request" 
} 

我不知道怎麼看完整的請求,但使用工作的toPrettyString()方法獲得:

{configuration= 
    {load= 
    { 
     createDisposition=CREATE_IF_NEEDED, 
     destinationTable={ 
     datasetId=vcf1, 
     projectId=x8-alien-rainfall-3, 
     tableId=NewTable 
     }, 
     encoding=UTF-8, 
     maxBadRecords=10, 
     schema={ 
     fields=[ 
      {name=sample_id, type=String}, 
      {name=chromosome, type=String}, 
      {name=start_pos, type=Integer}, 
      {name=end_pos, type=Integer}, 
      {name=reference, type=String}, 
      {name=observed, type=String}, 
      {name=quality, type=Float}, 
      {name=filter, type=String}, 
      {name=zygosity, type=String}, 
      {name=refGene_function, type=String} 
     ] 
     }, 
     skipLeadingRows=1, 
     sourceUris=[gs://vcfs/test_exome_part1.csv] 
    } 
    }, 
    jobReference={projectId=x8-alien-rainfall-3} 
} 

我安裝使用說明書在這裏我的要求:Load data from Google Cloud Storage to BigQuery using Java。實際的代碼如下所示:

public static void loadCsvAsNewTable(Bigquery bigquery, 
           Integer skipLeadingRows, 
           Integer maxBadRecords) 
     throws IOException { 

    String encoding = "UTF-8"; 
    String csvFile = "gs://vcfs/test_exome_part1.csv"; 
    String datasetId = "vcf1"; 
    String tableId = "NewTable"; 

    Job insertJob = new Job(); 
    insertJob.setJobReference(new JobReference().setProjectId(PROJECT_ID)); 
    JobConfiguration config = new JobConfiguration(); 
    JobConfigurationLoad loadConfig = new JobConfigurationLoad(); 
    config.setLoad(loadConfig); 

    List<String> sources = new ArrayList<String>(); 
    sources.add(csvFile); 
    loadConfig.setSourceUris(sources); 

    TableReference destinationTable = new TableReference(); 
    destinationTable.setDatasetId(datasetId); 
    destinationTable.setTableId(tableId); 
    destinationTable.setProjectId(PROJECT_ID); 
    loadConfig.setDestinationTable(destinationTable); 
    loadConfig.setSchema(tableSchema()); 
    loadConfig.setCreateDisposition("CREATE_IF_NEEDED"); 

    if (skipLeadingRows != null) { 
     loadConfig.setSkipLeadingRows(skipLeadingRows); 
    } 
    if (maxBadRecords != null) { 
     loadConfig.setMaxBadRecords(maxBadRecords); 
    } 

    loadConfig.setEncoding(encoding); 
    config.setLoad(loadConfig); 
    insertJob.setConfiguration(config); 

    System.out.println(insertJob.toPrettyString()); 

    Insert insert = bigquery.jobs().insert(PROJECT_ID, insertJob); 
    insert.setProjectId(PROJECT_ID); 

    println("Starting load job."); 
    Job job = insert.execute(); 
    if (isJobRunning(job)) { 
     Job doneJob = waitForJob(bigquery, PROJECT_ID, job.getJobReference()); 
     println("Done: " + doneJob.toString()); 
    } else { 
     println("Error: " + job.toString()); 
    } 
    } 

我能夠查詢使用相同的GoogleCredential,它使用一個服務帳戶方法的表。

任何援助將不勝感激。

+0

回答了我自己的問題。請求的模式部分中指定的字段類型必須是小寫字符串,而不是字符串。 – 2013-03-24 13:59:02

回答

1

在請求的模式部分中指定的字段類型必須是小寫字母:字符串而不是字符串

1

異常代碼400表示billingTierLimitExceeded

當您嘗試執行超出您項目的最大計費層的高計算查詢時,將返回此錯誤。

故障排除:減少每個輸入字節的計算次數或啓用高計算查詢以允許每個字節進行更多計算。

你可以參考這裏Troubleshooting Errors