0
我试图在时间戳列上使用Apache Phoenix的过滤器。Apache Phoenix CURRENT_TIME()给出NPE
我的表格和列存在。该列是类型TIMESTAMP。 https://phoenix.apache.org/language/datatypes.html#timestamp_type
0: jdbc:phoenix:localhost:2181:/hbase> SELECT * FROM METRIC where METRIC_ID = 'process.cpu' AND METRIC_TIMESTAMP > NOW();
java.lang.NullPointerException
at org.apache.phoenix.compile.ScanRanges.getAscTimeRange(ScanRanges.java:674)
我也试图与CURRENT_TIME()
0: jdbc:phoenix:localhost:2181:/hbase> SELECT * FROM METRIC where METRIC_ID = 'process.cpu' AND METRIC_TIMESTAMP > CURRENT_TIME();
java.lang.NullPointerException
at org.apache.phoenix.compile.ScanRanges.getAscTimeRange(ScanRanges.java:674)
at org.apache.phoenix.compile.ScanRanges.getRowTimestampColumnRange(ScanRanges.java:658)
会做。我对自动生成的时间戳有类似的问题。 – bearrito
为了解决这个问题,我应该使用map到sql.Date类型吗?这会保持毫米的粒度吗? – bearrito
在您的create table语句中,将METRIC_TIMESTAMP声明为DATE类型:CREATE TABLE METRIC(....,METRIC_TIMESTAMP DATE)。 Phoenix使用8个字节的纪元来存储日期,所以它始终处于毫秒级的粒度。确保使用显示完整粒度的SQL客户端 - 例如,sqlline仅显示DATE的白天部分。您可以使用SELECT TO_CHAR(METRIC_TIMESTAMP,'yyyy MM dd HH:mm:ss.SSS')FROM METRIC; –