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; –