diff --git ql/src/test/queries/clientpositive/timestamp_null.q ql/src/test/queries/clientpositive/timestamp_null.q new file mode 100644 index 0000000..94e88d7 --- /dev/null +++ ql/src/test/queries/clientpositive/timestamp_null.q @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS timestamp_null; +CREATE TABLE timestamp_null (t1 TIMESTAMP); +LOAD DATA LOCAL INPATH '../data/files/test.dat' OVERWRITE INTO TABLE timestamp_null; + +SELECT * FROM timestamp_null LIMIT 1; diff --git ql/src/test/results/clientpositive/timestamp_null.q.out ql/src/test/results/clientpositive/timestamp_null.q.out new file mode 100644 index 0000000..7c7037a --- /dev/null +++ ql/src/test/results/clientpositive/timestamp_null.q.out @@ -0,0 +1,24 @@ +PREHOOK: query: DROP TABLE IF EXISTS timestamp_null +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS timestamp_null +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE timestamp_null (t1 TIMESTAMP) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE timestamp_null (t1 TIMESTAMP) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@timestamp_null +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/test.dat' OVERWRITE INTO TABLE timestamp_null +PREHOOK: type: LOAD +PREHOOK: Output: default@timestamp_null +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/test.dat' OVERWRITE INTO TABLE timestamp_null +POSTHOOK: type: LOAD +POSTHOOK: Output: default@timestamp_null +PREHOOK: query: SELECT * FROM timestamp_null LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@timestamp_null +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM timestamp_null LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@timestamp_null +#### A masked pattern was here #### +NULL diff --git serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java index 7dc738a..71ed865 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java +++ serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java @@ -66,12 +66,17 @@ public void init(ByteArrayRef bytes, int start, int length) { s = ""; } - Timestamp t; + Timestamp t = null; if (s.compareTo("NULL") == 0) { - t = null; + isNull = true; logExceptionMessage(bytes, start, length, "TIMESTAMP"); } else { - t = Timestamp.valueOf(s); + try { + t = Timestamp.valueOf(s); + } catch (IllegalArgumentException e) { + isNull = true; + logExceptionMessage(bytes, start, length, "TIMESTAMP"); + } } data.set(t); }