首页 > 解决方案 > BigQuery 在 Firebase 函数中无法正常工作

问题描述

我正在尝试使用 Firebase 函数对 BigQuery 进行查询。当我测试在本地或在 BigQuery 控制台中运行该函数的查询时,它会正确返回。但是当我将该函数部署到 Firebase 并发出请求时,它返回 empty: [ [] ]

我正在使用的代码是:

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'

我在代码中看不到任何问题,特别是因为我有另一个函数使用相同的代码,但查询不同,它按预期工作。

关于为什么它不起作用的任何想法?

标签: sqlfirebasegoogle-bigquerygoogle-cloud-functions

解决方案


打印查询。我很确定你有多个错误,包括语法和逻辑。例如,该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()时间戳中的 a 与毫秒进行比较似乎非常可疑。

我建议您提出一个问题,其中包含示例数据、期望的结果以及您尝试实现的逻辑的解释。


推荐阅读