使用 Apps 脚本定义/创建 BigQuery 保存视图的 SQL 查询

Posted

技术标签:

【中文标题】使用 Apps 脚本定义/创建 BigQuery 保存视图的 SQL 查询【英文标题】:Define/Create a BigQuery saved view's SQL query using Apps Script 【发布时间】:2019-07-31 03:29:49 【问题描述】:

我想使用 Apps 脚本定义/创建 BigQuery 保存视图的 SQL 语句,但无法弄清楚。

我试过following this guide,但似乎无法解决。 定义/更新定义/创建已保存视图的 SQL 的 Apps 脚本函数是什么,在 BigQuery 中将其称为 project.dataset.vSAVEDVIEW

【问题讨论】:

您可以执行查询吗?你可以使用CREATE OR REPLACE VIEW 【参考方案1】:

通过 API 创建视图使用与tables.insert 相同的方法

使用包含视图属性的表资源调用tables.insert 方法。

因此您可以像this tutorial 那样运行查询。然后将数据保存到new table。

【讨论】:

【参考方案2】:

问题开始是因为当视图引用基于谷歌表格的表格时存储到新表格不起作用。无法弄清楚身份验证问题,所以我决定保存一个视图,但在提出这个问题时我还不能完全解决这个问题。我确实想出了如何做到这一点。我发现将表格属性放在最后非常重要,因为放在最前面时,它会创建一个表格而不是视图。我希望这对人们有所帮助...这是一个 Apps 脚本文件的结构,它将视图查询写入保存的视图而不是表:

// Choose the function to run from menu above.  
// You will need to delete the view first if it is already created.


// 1) This function deletes the already created saved view to make room for it to be created again.  function save_payments.vPayments_appscript() will fail if view already exists.

function remove_payments.vPayments_appscript() 
  var projectId = 'projectexample';
  var datasetId = 'payments';
  var tableId = 'vPayments_appsscript';
  table = BigQuery.Tables.remove(projectId,datasetId,tableId);
  

// 2) This function creates the saved view in BQ

function save_payments.vPayments_appscript() 
  var projectId = 'projectexample';
  var datasetId = 'payments';
  var tableId = 'vPayments_appsscript';
  var table = 
    view: 
        query: 
        'SELECT * FROM `projectexample.payments.tPayments1` ' +
        'UNION ALL ' +
        'SELECT * FROM `projectexample.payments.tPayments2` ',
        useLegacySql: false
    ,
    tableReference: 
      projectId: projectId,
      datasetId: datasetId,
      tableId: tableId,
    ,
  ;

  var queryResults = BigQuery.Tables.insert(table, projectId, datasetId);
  Logger.log(queryResults.status);

`

【讨论】:

以上是关于使用 Apps 脚本定义/创建 BigQuery 保存视图的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 的自动化 Apps 脚本未连接到正确的项目?

有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?

通常如何从 Google Apps 脚本访问 BigQuery

如何使用 Apps 脚本运行不将结果写入表的 BigQuery 作业?

使用 Google BigQuery / Apps 脚本为插入 Google 表格的数据添加时间戳

例外:未配置访问 - API 更新后使用 Google Apps 脚本的 BigQuery