【问题标题】:Accessing BigQuery with Google Spreadsheet使用 Google 电子表格访问 BigQuery
【发布时间】:2012-06-02 07:24:40
【问题描述】:

我在互联网上查看如何在 google 电子表格中导入 bigquery 数据。 我找到了这个appscript示例,但是它不起作用API不在同一级别,我没有找到如何在appscript中使用API​​2或API@beta1进行查询。

function runQuery() {
  var ss = SpreadsheetApp.getActive();
  var range = ss.getRangeByName('query');
  var query = range.getCell(1, 1).getValue();
  //var results = bigquery.query(query);



  var header = ss.getRangeByName('header');
  header.clearContent();
  var output = ss.getRangeByName('output');
  output.clearContent();
  for (var i = 0; i < results.fields.length; i++) {
    var field = results.fields[i];
    header.getCell(1, 1 + i).setValue(field.id);
  }
  for (var i = 0; i < results.rows.length; i++) {
    var row = results.rows[i].f;
    for (var j = 0; j < row.length; ++j) {
      output.getCell(1 + i, 1 + j).setValue(row[j].v);
    }
  }
}

提前感谢您的想法,

GQ

【问题讨论】:

标签: google-apps-script google-bigquery


【解决方案1】:

更新:我们刚刚添加了一个新的 BigQuery + Apps 脚本教程,它应该会在此处引导您回答这个问题: https://developers.google.com/apps-script/articles/bigquery_tutorial

@GQuery:我们最近更新了 AppsScript 以访问最新的 BigQuery API 版本 (v2)。这是一个简单的入门示例,将在 AppScript 日志中显示结果。我们正在努力更新 AppScript/BigQuery 文档。

function runQuery() {
  var projectId = 'YOUR PROJECT';
  var sql = 'select word, word_count from publicdata:samples.shakespeare limit 100';
  var queryResults;

  // Run the query
  try {
    queryResults = BigQuery.Jobs.query(projectId, sql);
  }
  catch (err) {
    Logger.log(err);
    return;
  }

  // Loop until successful job completion
  while (queryResults.getJobComplete() == false) {
    try {
      queryResults = BigQuery.Jobs.getQueryResults(projectId, queryResults.getJobReference().getJobId());
    }
    catch (err) {
      Logger.log(err);
      return;
    }
  }

  var tableRows = queryResults.getRows();
  for (var i = 0; i < tableRows.length; i++) {
    var rowString = '';
    var cols = tableRows[i].getF();
    for (var j = 0; j < cols.length; j++) {
      rowString += cols[j].getV() + '\t';
    }
    Logger.log(rowString);

【讨论】:

  • 亲爱的迈克尔,我试过你的解决方案。我可以问一个额外的问题吗?为了访问这些公共数据,我必须指定一个 projectid。正如我在google spreadhseet 中一样,它是appscript 项目密钥吗?因为我得到一个异常和以下消息:异常:无效的项目 ID“...”项目 ID 必须包含字母数字字符并且最多 63 个字符,
  • 好问题:projectId 应该引用您的 Google Dev Console 项目 ID,您需要在此处设置:code.google.com/apis/console。虽然您可以通过 BigQuery API 获取可用的 projectId,但查看 projectId 的一种快速方法是查看您创建的项目中的 URL:code.google.com/apis/console/?pli=1#project:265312182736
  • 嗨,迈克尔,您有要分享的示例电子表格吗?我试过了,但我无法访问我的样本或谷歌样本数据?!
  • 你能告诉我错误是什么吗?不要忘记在“Resources->Google APIs Services”下启用 BigQuery V2
  • 嗨,迈克尔,它有效。重读您的帖子,我明白了我的错误:我使用的是 API 密钥,而不是控制台 URL 中的 ProjectID。感谢您的帮助和花费的时间。 GQ
【解决方案2】:

我没有评论 hurricaneditka16 的声誉。因此,我发布了这个答案: 这一行

queryResults = BigQuery.Jobs.query(projectId, sql);

应该替换为

.query(
    resource,
    projectId);

Resource 是对你之前使用的 sql 的轻微改造。试试这个转换,它会起作用。

function getResource(sql) {
  var resource = '{"query": "sql"}'
  resource = resource.replace('sql', sql);
  return resource
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多