我正在尝试使用Firebase函数在BigQuery上进行查询。当我测试在本地或BigQuery控制台中运行该函数的查询时,它会正确返回。但是,当我将功能部署到Firebase并发出请求时,它返回空:
[ [] ]
。
我正在使用的代码是:
functions.https.onRequest((req, res) => {
const { id } = req.body;
const query = "SELECT (CASE WHEN COUNTIF((event_timestamp / 1000) <= (UNIX_MILLIS(CURRENT_TIMESTAMP()) - 172800000) OR event_name = 'EVENT_A' OR event_name = 'EVENT_B' ) >= 1 THEN TRUE ELSE FALSE END) UserIsMature FROM `analytics_table` WHERE user_id='" + id + "AND event_name = 'EVENT_A' OR event_name = 'EVENT_B' OR event_name = 'EVENT_C'"
bigQuery.query(query).then(result => response.send(result))
});
例如,正在运行的查询是:
SELECT (CASE WHEN COUNTIF((event_timestamp / 1000) <= (UNIX_MILLIS(CURRENT_TIMESTAMP()) - 172800000) OR event_name = 'EVENT_A' OR event_name = 'EVENT_B' ) >= 1 THEN TRUE ELSE FALSE END) UserIsMature FROM `analytics_table` WHERE user_id='EBtcJEsCHXN' AND event_name = 'EVENT_A' OR event_name = 'EVENT_B' OR event_name = 'EVENT_C'
我在代码中看不到任何问题,特别是因为我有另一个使用相同代码但使用不同查询的函数,它按预期工作。
对为什么它不起作用有任何想法吗?
答案 0 :(得分:1)
打印查询。我很确定您在语法和逻辑上都有多个错误。例如,WHERE
子句似乎是:
WHERE user_id='1 AND event_name = 'EVENT_A' OR event_name = 'EVENT_B' OR event_name = 'EVENT_C'
(1
是一个插入值)。
当您可能打算这样做时:
WHERE user_id = 1 AND event_name IN ('EVENT_A', 'EVENT_B', 'EVENT_C')
类似地,将COUNTIF()
与时间戳中的毫秒进行比较似乎很可疑。
我建议您问一个 new 问题,其中包含示例数据,所需结果以及对您要实现的逻辑的解释。