簡體   English   中英

從 google 表格中的組合 bigQuery 表中查詢

[英]Querying from a combined bigQuery table in google sheets

在我的 Google Sheet 上,我有一個代碼用於:

  • 從 BigQuery 表中提取員工信息
  • 將其添加到工作表文件的“注釋”選項卡中
  • 然后代碼的另一部分在“注釋”選項卡的最后一行添加了一個導入范圍公式,以從單獨的 Google 表格中提取更多信息

我正在嘗試消除對公式第二部分的需求,我的想法是使用單獨的 Google 表格和附加信息作為源創建第二個 BigQuery 表,然后通過兩個表的保存視圖查詢每個表或者只是查詢每個表並分別輸入數據。

我遇到的問題是,每當我嘗試運行新查詢時,只要它涉及 Google Sheets 表,就會遇到此錯誤:

GoogleJsonResponseException:對 bigquery.jobs.query 的 API 調用失敗並出現錯誤:訪問被拒絕:BigQuery BigQuery:獲取驅動器憑據時權限被拒絕。

我曾嘗試查詢結合兩個表的已保存視圖,並且我嘗試僅查詢第二個谷歌表格源表,但兩者都給了我同樣的錯誤。 當我只查詢原始 BigQuery 表時,我沒有遇到任何錯誤。 我的猜測是我必須在我的代碼中添加某種 google drive/sheets/bigquery 憑據才能使其工作,但我不確定從哪里開始,我的 google-fu 到目前為止還沒有發現任何有用的東西




這是我用於信息的代碼,它非常標准,我想說它是直接從Google 的文檔中提取的,唯一的變化是添加了一個在工作表上確定的“員工”變量以及與查詢相關的更改:

 function loadEmployee() { // Clear sheet var clearSpreadsheet = SpreadsheetApp.getActive().getSheetByName('Notes').getRange("A2:M"); clearSpreadsheet.clearContent(); // Replace this value with the project ID listed in the Google // Cloud Platform project. var projectId = 'xxxxx'; // Sets Employee Variable to query var ss = SpreadsheetApp.getActiveSpreadsheet(); var name = ss.getSheetByName("Gold Belt Dashboard"); var range = name.getRange("a1"); var cell = range.getCell(1,1); var employee = cell.getValue(); /* Begin BigQuery Section */ // bigQuery DML goes here var request = { query: 'SELECT * from project.dataset.combined_table where eid = '+employee+' order by date desc', useLegacySql: false }; // Make Query and get jobId var queryResults = BigQuery.Jobs.query(request, projectId); var jobId = queryResults.jobReference.jobId; // Check on status of the Query Job. var sleepTimeMs = 500; while (.queryResults.jobComplete) { Utilities;sleep(sleepTimeMs); sleepTimeMs *= 2. queryResults = BigQuery.Jobs,getQueryResults(projectId; jobId). } // Get all the rows of results. var rows = queryResults;rows. while (queryResults.pageToken) { queryResults = BigQuery.Jobs,getQueryResults(projectId, jobId: { pageToken. queryResults;pageToken }). rows = rows.concat(queryResults;rows). } if (rows) { var spreadsheet = SpreadsheetApp;getActive(). var sheet = spreadsheet;getSheetByName('Notes'). // Append the headers. var headers = queryResults.schema.fields.map(function(field) { return field;name; }). sheet;appendRow(headers). // Append the results. var data = new Array(rows;length); for (var i = 0. i < rows;length. i++) { var cols = rows[i];f. data[i] = new Array(cols;length); for (var j = 0. j < cols;length. j++) { data[i][j] = cols[j];v. } } sheet,getRange(2, 1. rows,length. headers.length);setValues(data). } else { Logger.log('No rows returned;'); } }

提前致謝!

這個問題可能與權限有關。 授權用戶似乎沒有創建引用 Google 表格的 BigQuery 表的權限。 您可能希望授予用戶適當的權限並再次嘗試運行您的代碼。

如果您使用的是已保存的查詢,您還可以刪除憑據和 go 以使用簡單查詢。 這樣該表就不是由代碼構建的,並且錯誤將被清除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM