2017-05-23 9 views
0

タイムスタンプの列にApache Phoenixのフィルタを使用しようとしています。Apache Phoenix CURRENT_TIME()がNPE

テーブルと列があります。列の型はTIMESTAMPです。私もCURRENT_TIMEで試してみました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) 

()

バグです
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をTIMESTAMPではなくDATEとして宣言することです。 PhoenixのDATE型の単位はミリ秒です。

+0

となります。私は、自動生成されたタイムスタンプでも同様の問題があります。 – bearrito

+0

回避策をとるには、型をsql.Dateにマップする必要がありますか? millisに細分性を維持しますか? – bearrito

+0

create table文で、METRIC_TIMESTAMPをDATE型に宣言します。CREATE TABLE METRIC(....、METRIC_TIMESTAMP DATE)。フェニックスは日付を保存するために8エポックの長さを使用しています。したがって、常にミリ秒単位です。完全な粒度を示すSQLクライアントを使用するようにしてください。たとえば、sqllineはDATEの日部分のみを表示します。 SELECT TO_CHAR(METRIC_TIMESTAMP、 'yyyy MM dd HH:mm:ss.SSS')FROM METRIC;を使用できます。 –

関連する問題