sql - 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'
我在代码中看不到任何问题,特别是因为我有另一个函数使用相同的代码,但查询不同,它按预期工作。
关于为什么它不起作用的任何想法?
解决方案
打印查询。我很确定你有多个错误,包括语法和逻辑。例如,该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 与毫秒进行比较似乎非常可疑。
我建议您提出一个新问题,其中包含示例数据、期望的结果以及您尝试实现的逻辑的解释。
推荐阅读
- c - C程序在输入后关闭
- postgresql - postgresql函数中的递归动态查询很慢
- python-3.x - 从选择了范围和特定列的数据框中切片列
- python-3.x - Django 包版本具有冲突的依赖项。(删除包版本以允许 pip 尝试解决依赖冲突)
- reactjs - FormControl标签被Material UI中的Outline边框越过 - ReactJs
- .net - 任何修补.net 65535像素限制的方法
- wordpress - 如何使用其中一种帖子类型中的字段链接两种自定义帖子类型?
- javascript - 使用 mocha 和 chai 对 async/await javascript 进行单元测试
- python - 从多个字典值列表创建数据框
- java - Android Studio 中位图动画上的 OnClickListener 抛出 NullPointerException