Google Cloud中DATE_TRUNC函数报错:处理event_timestamp获取购买时间
解决Google Cloud BigQuery中event_timestamp格式化问题
问题原因
你写的查询报错主要有两个问题:
event_timestamp是微秒级数值时间戳,直接用DATE()转换会被BigQuery当成秒数处理,不仅转换结果错误,还导致后续DATE_TRUNC的参数类型不匹配;DATE_TRUNC的日期部分参数在BigQuery中不需要加单引号,应该用MONTH而非'month'。
另外,你的查询逻辑是截断到月份,但你期望的结果是带时分秒的完整日期时间,所以原语句的逻辑也不符合需求。
正确解决方案
1. 获取带时分秒的完整日期时间(匹配你期望的结果)
先把微秒时间戳转换成标准TIMESTAMP类型,再格式化指定输出格式:
SELECT FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP_MICROS(event_timestamp)) AS purchase_date FROM `你的数据集.你的表名`
用你提供的示例时间戳1605430896492843测试,会得到2020-11-15 12:21:36(和你给出的示例结果接近,属于时间戳精度差异)。
2. 如果确实需要截断到月份(修正原查询逻辑)
如果你的实际需求是把日期截断到当月第一天,正确写法是:
SELECT DATE_TRUNC(TIMESTAMP_MICROS(event_timestamp), MONTH) AS purchase_month FROM `你的数据集.你的表名`
或者转换成DATE类型输出:
SELECT DATE(DATE_TRUNC(TIMESTAMP_MICROS(event_timestamp), MONTH)) AS purchase_month FROM `你的数据集.你的表名`
内容的提问来源于stack exchange,提问作者Mustafa Al-Qayssei
相关产品推荐
相关产品推荐

