尝试使用 Apps 脚本查询 BQ 时出错

Posted

技术标签:

【中文标题】尝试使用 Apps 脚本查询 BQ 时出错【英文标题】:Error when trying to query BQ with Apps Script 【发布时间】:2018-06-28 14:42:23 【问题描述】:

我正在尝试获取 Apps 脚本以进行 BQ 查询,但是我收到以下错误:

在第 1 行第 41 列遇到“FROM”“FROM”。期待:“)” ...(第 14 行,文件“代码”)

查询在 BQ 中运行良好,所以我不明白这里出了什么问题...

这是脚本:

  var datasets = [
    ['012345', "Country"]
    // other datasets will complete the list
  ]

  datasets.forEach(function(value) 
    var datasetId = value[0];
    var countryName = value[1];

    var queryDataset = BigQuery.Jobs.query(
      'query' : 'SELECT "' + countryName + '" as country,' +
       'EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE "Europe/Paris") AS Hour,' +
       '(SELECT MAX(sourcePropertyInfo.sourcePropertyDisplayName)' +
       'FROM UNNEST(session.hits) AS hits) AS service,' +
       'IFNULL(SUM(totals.visits),0) as sessions,' +
       'IFNULL(SUM(totals.transactions),0) as transactions,' +
       'IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate' +
       'FROM `xx-135923.' + datasetId + '.ga_realtime_view` AS session' +
       'GROUP BY' +
       'Hour,' +
       'service' +
       'ORDER BY' +
       'Hour;',
       'defaultDataset' : 
       'datasetId': datasetId,
       'useLegacySql' : false
      
      , 'xx-135923');

你们有什么想法吗?

感谢您的帮助

【问题讨论】:

那么,您是否调试了构建的 Apps 脚本查询?如果您在语法极其重要的复杂变量构造中遇到错误,例如嵌套 SQL 调用,最好先构造一个复杂查询并使用try + catch 打印所使用的查询及其生成的错误。请参阅此答案中的代码以了解我的意思:***.com/a/51085317/9337071 感谢您的帮助。我创建了一个变量来记录构造的查询,然后在 BQ 查询中使用它。当我在字符串中使用双引号时,我还通过添加空格和转义序列来稍微清理查询。当我在其上使用 Logger.log 时查询是准确的,但是我仍然得到同样的错误。 删除“EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE "Europe/Paris") AS Hour”部分显然修复了它,尽管我不知道为什么。现在我收到一个新错误“无效的表名:xx-135923:012345.ga_realtime_view”,我也不明白,因为该表是准确的。 好的,我找到了。这是一个愚蠢的错误:我将“'useLegacySql':false”部分放在“defaultDataset”对象中。所以我实际上是在 Legacy SQL 而不是 Standard 中查询。 @kinzie 您能否写下您的评论作为答案。谢谢! 【参考方案1】:

问题已解决:这是一个愚蠢的错误。我将“'useLegacySql':false”部分放在“defaultDataset”对象中。所以我实际上是在 Legacy SQL 而不是 Standard 中查询

【讨论】:

我没有改变我的任何东西,它似乎使用旧版 SQL 来处理 bq 命令行脚本。因此,我必须将表名放在方括号中而不是反引号中。感谢您发布此内容。

以上是关于尝试使用 Apps 脚本查询 BQ 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Airflow 从 Google Storage 导出到 BQ 时出错

使用 Google Apps 脚本设置压缩查询导出

BQ shell 使用 write_disposition 作为写入附加加载数据存储时出错

在 Google Big Query 中使用 bq 命令行执行查询

出错时再次循环

在 Google Apps 脚本中使用 CloudKit Web 服务 API 查询 CloudKit 公共数据库时的 AUTHENTICATION_FAILED