【发布时间】: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打印所使用的查询及其生成的错误。请参阅此答案中的代码以了解我的意思:stackoverflow.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 您能否写下您的评论作为答案。谢谢!
标签: google-apps-script google-bigquery