Presto查询Cassandra表遇Millis overflow错误,如何过滤异常日期?
解决Presto查询Cassandra日期时的毫秒溢出问题
错误原因是表中存在超出Presto时间处理范围的异常日期值,需先过滤非法记录再执行聚合查询。
过滤异常日期的具体方法
基于合法时间区间过滤:
Presto能处理的常规时间范围大致是1970年到2100年,对应毫秒值区间为0(1970-01-01 00:00:00 UTC)至4102444799999(2100-01-01 23:59:59 UTC)。用时间戳直接过滤:SELECT max(date) FROM table WHERE date >= TIMESTAMP '1970-01-01 00:00:00' AND date <= TIMESTAMP '2100-01-01 23:59:59';通过毫秒值范围过滤:
直接转换日期为毫秒值,排除超出合理范围的记录:SELECT max(date) FROM table WHERE to_milliseconds(date) BETWEEN 0 AND 4102444799999;
异常数据排查
如果需要确认具体的异常记录,可以先查询超出范围的数据:
SELECT date, to_milliseconds(date) FROM table WHERE to_milliseconds(date) < 0 OR to_milliseconds(date) > 4102444799999;
根据查询结果,你可以调整过滤条件,或者直接清理这些异常数据。
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

