【问题标题】:Amend BigQuery Data Using Google Apps Script使用 Google Apps 脚本修改 BigQuery 数据
【发布时间】:2018-12-20 15:00:56
【问题描述】:

我想知道是否有人可以帮助我?

我整理了下面的脚本,用于修改我的 bigQuery 表中的数据:

function runQuery() {
   var projectId = 'bigquery';
   var datasetId = 'Test';  
   var date = '20181206';
   var tableId = 'ga_sessions_'+date;
// Configuration
   var configuration = {
    "query": {
    "useQueryCache": false,
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "useLegacySql": false,
    query: "SELECT * EXCEPT (hits),ARRAY( SELECT AS STRUCT * EXCEPT (page, appInfo, eventInfo ),(SELECT "+
"AS STRUCT page.* EXCEPT (pagePath, pagePathLevel1, pagePathLevel2, pagePathLevel3, pagePathLevel4), "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePath,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel1, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel2,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel3, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel4, "+
"`bigquery.Test.ga_sessions_20181206`",
  destinationTable: { projectId: projectId, datasetId: datasetId, tableId: tableId } 
   }
 };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "bigquery");
  Logger.log(jobResult);
}

代码有效,但我现在想更改这一行:

"`bigquery.Test.ga_sessions_20181206`"

因此,最终用户不必输入日期,而是从“var date”中获取日期。

我已将代码修改为:

function runQuery() {
   var projectId = 'bigquery';
   var datasetId = 'Test';  
   var date = '20181206';
   var tableId = 'ga_sessions_'+date;
// Configuration
   var configuration = {
    "query": {
    "useQueryCache": false,
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "useLegacySql": false,
    query: "SELECT * EXCEPT (hits),ARRAY( SELECT AS STRUCT * EXCEPT (page, appInfo, eventInfo ),(SELECT "+
"AS STRUCT page.* EXCEPT (pagePath, pagePathLevel1, pagePathLevel2, pagePathLevel3, pagePathLevel4), "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePath,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel1, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel2,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel3, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel4, "+
"`bigquery.Test.ga_sessions_*` "+
"WHERE "+
      "  _TABLE_SUFFIX = 'date' " ,      

  destinationTable: { projectId: projectId, datasetId: datasetId, tableId: tableId } 
   }
 };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "bigquery");
  Logger.log(jobResult);
}

我现在遇到的问题是,它没有修改数据,而是将其完全删除。

有人可以看看这个,让我知道我哪里出错了。

非常感谢和亲切的问候

克里斯

【问题讨论】:

    标签: google-apps-script google-bigquery


    【解决方案1】:

    问题出在这里:

    "  _TABLE_SUFFIX = 'date' "
    

    查询实际上是在寻找名为'date' 的后缀,而不是用户指定的任何后缀。拥有 Apps Script 环境的其他人可能能够给出更具体的答案,但基本思想是您应该使用 query parameter 代替,因此您将使用 @date(无引号)而不是 'date',您可以将用户指定的日期作为 STRING 类型的查询参数与请求一起传递。

    【讨论】:

    • 嗨@elliott Brossard,谢谢你。不幸的是,虽然它不再删除数据,但它也不会修改数据。非常感谢和亲切的问候
    • 我不确定你的意思是它不修改数据。您提供的代码没有等待查询完成或检查其状态,所以这可能是问题所在。
    • 嗨。是的,也许这就是问题所在。我会继续努力,因为它显然包含一些问题。非常感谢您的帮助。问候。克里斯
    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多