无法将查询另存为视图表

时间:2016-04-14 09:43:02

标签: google-sheets google-bigquery

我有一个运行的查询,可以查看结果。但是在尝试将查询保存为视图表时,我收到错误消息

  

无法保存视图。找不到合适的凭据来访问Google   驾驶。请联系表所有者以获取帮助。

我认为问题是由查询中使用的表引起的。该表是从谷歌表(带有源URI)上传的,由我自己拥有。我试图从项目中启用Google Drive API,但没有运气。不确定如何让BigQuery访问Google云端硬盘。

2 个答案:

答案 0 :(得分:1)

我怀疑你遇到的问题是OAuth Scopes之一。要与Google云端硬盘API通信以读取数据,您需要使用已授予该API访问权限的凭据。

如果您使用的是BigQuery Web UI并且未明确授予对Drive的访问权限,则无法使用。例如,我第一次尝试“保存到Google表格”时,BigQuery用户界面会弹出一个OAuth提示,要求我授予对我的Google云端硬盘的访问权限。在此之后它可以保存结果。尝试执行此操作以确保您的凭据具有云端硬盘范围,然后再次“保存视图”。

如果您使用自己的代码执行此操作,除了您已用于与BigQuery交谈的'https://www.googleapis.com/auth/drive'范围外,还应请求范围'https://www.googleapis.com/auth/bigquery'

如果您使用的是bq客户端,则它已更新为请求此范围,但您可能需要重新初始化身份验证凭据。您可以使用bq init --delete_credentials执行此操作以删除凭据,然后执行我们重新请求凭据的下一个操作。

答案 1 :(得分:0)

使用Google App Script这对我有用:

function saveQueryToTable() {
  var projectId = '...yourprojectid goes here...';
  var datasetId = '...yourdatesetid goes here...';
  var sourceTable = '...your table or view goes here...';
  var destTable = '...destination table goes here...';
var myQuery;
  
  //just a random call to activate the Drive API scope
  var test = Drive.Properties.list('...drive file id goes here...')
  
  //list all tables for the particular dataset
  var tableList = BigQuery.Tables.list(projectId, datasetId).getTables();
  
  //if the table exist, delete it
  for (var i = 0; i < tableList.length; i++) {
    if (tableList[i].tableReference.tableId == destTable) { 
      BigQuery.Tables.remove(projectId, datasetId, destTable);
      Logger.log("DELETED: " + destTable);
    }
  };
 
 myQuery =  'SELECT * FROM [PROJECTID:DATASETID.TABLEID];'
 .replace('PROJECTID',projectId)
 .replace('DATASETID',datasetId)
 .replace('TABLEID',sourceTable)
  
 var job = {
    configuration: {
      query: {
        query: myQuery,
        destinationTable: {
          projectId: projectId,
          datasetId: datasetId,
          tableId: destTable
        }
      }
    }
  };

  var queryResults = BigQuery.Jobs.insert(job, projectId);
  Logger.log(queryResults.status);
}

“技巧”是随机调用Drive API以确保包含BigQuery和Drive范围。

Google Apps Script Project Properties