6

我在互联网上查看如何在 google 电子表格中导入 bigquery 数据。我找到了这个 appscript 示例,但它不起作用 API 不在同一级别,我没有找到如何在 appscript 中使用 API2 或 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

4

2 回答 2

9

更新:我们刚刚添加了一个新的 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);
于 2012-05-27T23:27:54.330 回答
0

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

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

应该替换为

.query(
    resource,
    projectId);

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

function getResource(sql) {
  var resource = '{"query": "sql"}'
  resource = resource.replace('sql', sql);
  return resource
}
于 2013-12-27T16:12:30.697 回答