BQ每小时运行的查询出现TIMESTAMP与DATETIME比较不匹配错误如何解决?
BigQuery时间过滤报错解决方法
错误根因
报错是因为比较的两个值数据类型不匹配:
- 左侧
TransactionTimestamp字段是TIMESTAMP类型(带时区信息,你看到的2021-11-05 03:14:22 UTC格式就是TIMESTAMP的典型展示) - 右侧
DATETIME(DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -60 MINUTE))的输出是DATETIME类型(无时区信息)
BigQuery不支持直接对两种不同的时间类型做大小比较,因此触发类型不匹配报错。
可用解决方案
方案1(优先推荐):统一用TIMESTAMP类型比较
直接对当前时间戳做减法,生成TIMESTAMP类型的对比值,和左侧字段类型完全匹配,性能最优也不会出现时区偏差:
TransactionTimestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 MINUTE)
方案2:将左侧字段转为DATETIME类型匹配右侧
如果需要保留原有右侧的写法,可以手动把左侧的TIMESTAMP字段转为DATETIME类型,注意指定时区避免偏差:
-- 如果你业务用UTC时区,就用这个写法 DATETIME(TransactionTimestamp, "UTC") >= DATETIME(DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -60 MINUTE))
内容的提问来源于stack exchange,提问作者clucko87
相关产品推荐
相关产品推荐

