BigQuery在Firebase函数中无法正常工作

时间:2019-06-02 13:07:39

标签: sql firebase google-bigquery google-cloud-functions

我正在尝试使用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'

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

对为什么它不起作用有任何想法吗?

1 个答案:

答案 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 问题,其中包含示例数据,所需结果以及对您要实现的逻辑的解释。