2014-10-20 88 views
4

我正在嘗試使用Google Apps腳本來自動執行每日聚合過程。這個想法是在一個數據集的幾張表格上運行,並將結果保存到另一個數據集的表格中。我的用戶擁有相關數據集的權限。Bigquery API:使用destinationTable運行查詢不會保存結果

我的要求如下所示

 var request = { 
     "maxResults": 10000, 
     "useQueryCache": false, 
     "destinationTable": { 
       "projectId": "project_name_obfuscated", 
       "datasetId": "project_114151_shared", 
       "tableId": "test123" 
      }, 
     "writeDisposition": "WRITE_TRUNCATE", 
     "createDisposition": "CREATE_IF_NEEDED", 
     "allowLargeResults": true, 
     "query": "query syntax here" 
     }; 

    var queryResults = BigQuery.Jobs.query(request, "project_name_obfuscated"); 

(我模糊的項目和查詢本身出於保密原因的名稱)。

該查詢實際運行良好,但是,它沒有被保存到我定義的指定項目/數據集/表中。

在BQ UI我所看到的是這樣的:

Job ID: project_name_obfuscated:job_NhkQpi110p3i5yoOO7nzXp3tTKY 
Start Time: 5:47pm, 20 Oct 2014 
End Time: 5:47pm, 20 Oct 2014 
Bytes Processed: 0 B 
Destination Table: project_name_obfuscated:_138c3340e691065e8db0b55781b5a41c6b4bcd49.anonev_SOiiRC10lfetj000kcj4rmXNc5E 

任何想法我做錯了嗎?

回答

5

您使用的參數只能通過Jobs.query方法中的Jobs.insert使用。 Jobs.query用於快速同步查詢,並且不支持Jobs.insert(異步版本)中提供的全部選項。

試着這麼做:

var configuration = { 
    "query": { 
    "useQueryCache": false, 
    "destinationTable": { 
      "projectId": "project_name_obfuscated", 
      "datasetId": "project_114151_shared", 
      "tableId": "test123" 
     }, 
    "writeDisposition": "WRITE_TRUNCATE", 
    "createDisposition": "CREATE_IF_NEEDED", 
    "allowLargeResults": true, 
    "query": "query syntax here" 
    } 
}; 
var job = { 
    "configuration": configuration 
}; 

var jobResult = BigQuery.Jobs.insert(job, "project_name_obfuscated"); 

var jobId = jobResult.jobReference.jobId; 

// The job might not actually be done; wait until it is marked 
// complete. 
var sleepTimeMs = 500; 
while (true) { 
    Utilities.sleep(sleepTimeMs); 
    sleepTimeMs *= 2; 
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, { 
     "maxResults": 10000); 
    if (!queryResults.jobComplete) { 
     break; 
    } 
} 
+1

以標記爲需求小幅盤整解決 - 配置的全部內容必須是背後另有「查詢」參數(例如配置 - >查詢 - >) 。否則,您會從API中獲取錯誤。 var configuration = { 「query」:{ 「useQueryCache」:false, – 2014-10-22 06:57:47

+0

謝謝。修正(看起來像你提出的更新由於某種原因被SO主持人拒絕了,但我仍然應用了)。 – 2014-10-27 15:11:17

相關問題