2017-05-23 59 views
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) 

回答

0

這是一個錯誤 - 請提交JIRA。解決方法是將METRIC_TIMESTAMP聲明爲DATE而不是TIMESTAMP。 Phoenix中的DATE類型具有毫秒的粒度。

+0

會做。我對自動生成的時間戳有類似的問題。 – bearrito

+0

爲了解決這個問題,我應該使用map到sql.Date類型嗎?這會保持毫米的粒度嗎? – bearrito

+0

在您的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; –