我正在尝试使用 App Script 将 BigQuery 结果加载到 Google 电子表格中。这是我的代码
function runQuery() {
var projectId = 'xxxxx';
var request = {
query: 'select * from ASRLogs.LocationBasedClicks;'
};
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 the result.
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.create("BigQuery Results");
var sheet = spreadsheet.getActiveSheet();
// 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).setValue(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
} else {
Logger.log('No rows returned.')
}
}
我得到的错误是
错误:invalid_client
找不到 OAuth 客户端。
请求详细信息
- cookie_policy_enforce=假
- scope=https://www.googleapis.com/auth/bigquery https://www.googleapis.com/auth/spreadsheets
- response_type=代码会话
- redirect_uri=https://script.google.com/oauthcallback
- access_type=离线
- approval_prompt=力
- state=ACjPJvHwuS-sspO-j9b5vlH_Ul4VokI3QRANL-gwa7YWxz6-RFelZBuLQ2aiiGldHRgR89sMnvlgpsmSOnlquEY45oTt1IgZHWfoWq5e52Jf6l_G-5yPpPwCf40Dkv_JYR9welQPrQ
- client_id=734978265744@developer.gserviceaccount.com
- hl=en
我错过了什么吗?我已经做了以下工作。
- 在 Google Serveices 中启用了 BigQuery API
- 在开发人员控制台中为项目启用了 BigQuery。
检查您的客户端 ID 或密钥是否在您的代码中不包含任何空格 - 这是我的问题,我在从控制台复制信息时没有注意到<</p>
我昨天遇到了完全相同的问题。
我已经多次复制一个文档,它反过来会复制其中的所有脚本,每个脚本都附加"副本"。我最终得到的是"副本的副本副本的副本副本"。
作为最后的手段,我将脚本项目重命名为",嘿,presto,它很好。
我的理论是,由于脚本项目名称被用作请求授权的应用程序的名称,因此这里有一些字符限制。
将项目重命名为较短的名称是否可以解决问题?
Google API 控制台中的Consent Screen
部分(从左侧边栏),更改产品名称并保存更改。