计划的BigQuery作业中的动态表格和数据集

时间:2018-10-15 07:17:09

标签: google-apps-script google-bigquery

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

我一直在看以下教程:https://shinesolutions.com/2017/11/01/scheduling-bigquery-jobs-using-google-apps-script/

我了解脚本的原理,但是我想使脚本的两个元素动态化。

function runQuery() {
  var configuration = {
    "query": {
    "useQueryCache": false,
    "destinationTable": {
          "projectId": "project",
          "datasetId": "dataset",
          "tableId": "ga_sessions_20181014"
        },
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "useLegacySql": false,
    "query": "SELECT * FROM `project.dataset.ga_sessions_20181014`"
    }
  };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "grey-sort-challenge");
  Logger.log(jobResult);
}

这些是“源”和“目标”表ID中的日期,因此将显示当前的第一天。即ga_sessions_20181014,然后是ga_sessions_20181015,依此类推。

有人可以告诉我,这可能吗?

非常感谢和问候

克里斯

1 个答案:

答案 0 :(得分:0)

您只需要定义一个保存昨天日期的变量并对其进行适当的格式化,然后将其连接到您的配置中即可。

执行此操作的方法很多,如评论中所指出,最直接的方法可能是使用Utilities.formatDate。这是一个示例:

var timeZone = 'America/Chicago';
var yesterday = Utilities.formatDate(new Date(Date.now() - 24*60*60*1000), timeZone, 'yyyyMMdd');

var configuration = {
  "query": {
  "useQueryCache": false,
  "destinationTable": {
        "projectId": "project",
        "datasetId": "dataset",
        "tableId": "ga_sessions_" + yesterday
      },
  "writeDisposition": "WRITE_TRUNCATE",
  "createDisposition": "CREATE_IF_NEEDED",
  "allowLargeResults": true,
  "useLegacySql": false,
  "query": "SELECT * FROM `project.dataset.ga_sessions_" + yesterday + "`"
  }
};