2017-05-23 7 views
0

Ich versuche, Apache Phoenix-Filter auf Timestamp-Spalte zu verwenden.Apache Phoenix CURRENT_TIME() gibt NPE

Meine Tabelle und Spalte existiert. Die Spalte ist vom Typ 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) 

ich auch mit CURRENT_TIME versucht()

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) 

Antwort

0

Das ist ein Fehler ist - bitte eine JIRA-Datei. Eine Problemumgehung wäre, METRIC_TIMESTAMP als ein DATUM anstelle von TIMESTAMP zu deklarieren. Der Typ DATE in Phoenix hat eine Granularität von Millisekunden.

+0

Wird tun. Ich habe ein ähnliches Problem für automatisch generierte Zeitstempel. – bearrito

+0

Um die Problemumgehung zu umgehen, sollte ich den Typ zu sql.Date zuordnen? Wird das Granularität zu Millis beibehalten? – bearrito

+0

In der Anweisung create table deklarieren Sie METRIC_TIMESTAMP als Datentyp DATE: CREATE TABLE METRIC (...., METRIC_TIMESTAMP DATE). Phoenix verwendet eine 8-Byte-Epoche, um das Datum zu speichern, so dass es sich immer um eine Granularität von Millis handelt. Stellen Sie sicher, dass Sie einen SQL-Client verwenden, der die vollständige Granularität anzeigt - beispielsweise zeigt sqline nur den Tag eines Datums an. Sie können SELECT TO_CHAR (METRIC_TIMESTAMP, 'JJJJ MM TT HH: mm: ss.SSS') FROM METRIC; –