You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2018/06/28 22:48:42 UTC

[46/52] [abbrv] hive git commit: HIVE-20007: Hive should carry out timestamp computations in UTC (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)

HIVE-20007: Hive should carry out timestamp computations in UTC (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ae008b79
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ae008b79
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ae008b79

Branch: refs/heads/master-txnstats
Commit: ae008b79b5d52ed6a38875b73025a505725828eb
Parents: 49abcf7
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Wed Jun 20 11:02:10 2018 -0700
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Thu Jun 28 08:35:51 2018 -0700

----------------------------------------------------------------------
 .../hive/accumulo/mr/TestHiveAccumuloTypes.java |  23 +-
 .../predicate/TestAccumuloRangeGenerator.java   |   2 +-
 .../apache/hadoop/hive/common/type/Date.java    | 181 +++++
 .../hadoop/hive/common/type/Timestamp.java      | 235 ++++++
 .../hive/common/type/TimestampTZUtil.java       |  16 +-
 .../hadoop/hive/common/type/TimestampUtils.java | 171 +++++
 .../org/apache/hadoop/hive/conf/HiveConf.java   |   2 +-
 .../org/apache/hive/common/util/DateParser.java |  24 +-
 .../org/apache/hive/common/util/DateUtils.java  |   2 +
 .../hive/common/util/TimestampParser.java       |  36 +-
 .../TestHiveDecimalOrcSerializationUtils.java   |   8 -
 .../hive/common/type/TestTimestampTZ.java       |   1 -
 .../apache/hive/common/util/TestDateParser.java |   7 +-
 .../hive/common/util/TestTimestampParser.java   |  27 +-
 data/files/alltypesorc3xcols                    | Bin 1504592 -> 1502944 bytes
 data/files/orc_split_elim.orc                   | Bin 246402 -> 2298 bytes
 .../hadoop/hive/druid/serde/DruidSerDe.java     |  77 +-
 .../hadoop/hive/druid/serde/TestDruidSerDe.java |  27 +-
 .../hadoop/hive/hbase/HBaseRowSerializer.java   |   2 +-
 .../hive/hbase/HiveHBaseInputFormatUtil.java    |   3 +-
 .../apache/hadoop/hive/hbase/LazyHBaseRow.java  |   4 +-
 .../test/results/positive/hbase_timestamp.q.out |  64 +-
 .../org/apache/hive/hcatalog/data/DataType.java |   4 +-
 .../apache/hive/hcatalog/data/HCatRecord.java   |   4 +-
 .../apache/hive/hcatalog/data/JsonSerDe.java    |   4 +-
 .../apache/hive/hcatalog/data/ReaderWriter.java |  15 +-
 .../hcatalog/data/TestDefaultHCatRecord.java    |   8 +-
 .../hive/hcatalog/data/TestJsonSerDe.java       |   6 +-
 .../hive/hcatalog/pig/HCatBaseStorer.java       |   8 +-
 .../apache/hive/hcatalog/pig/HCatLoader.java    |   1 +
 .../apache/hive/hcatalog/pig/PigHCatUtil.java   |   9 +-
 .../hcatalog/pig/AbstractHCatLoaderTest.java    |  20 +-
 .../hcatalog/pig/AbstractHCatStorerTest.java    |  16 +-
 .../vectorization/ColumnVectorGenUtil.java      |  11 +-
 .../apache/hive/jdbc/BaseJdbcWithMiniLlap.java  |   4 +-
 .../hive/jdbc/TestJdbcWithMiniLlapArrow.java    |   4 +-
 .../test/resources/testconfiguration.properties |   2 +
 .../hive/llap/io/TestChunkedInputStream.java    |   4 +-
 .../io/decode/GenericColumnVectorProducer.java  |   2 +-
 .../llap/io/decode/OrcEncodedDataConsumer.java  |   3 +-
 .../DTIColumnCompareScalar.txt                  |   4 +-
 .../DTIScalarCompareColumn.txt                  |   4 +-
 ...eColumnArithmeticIntervalYearMonthColumn.txt |  28 +-
 ...eColumnArithmeticIntervalYearMonthScalar.txt |  26 +-
 .../DateColumnArithmeticTimestampColumn.txt     |  14 +-
 .../DateColumnArithmeticTimestampScalar.txt     |  16 +-
 ...eScalarArithmeticIntervalYearMonthColumn.txt |  16 +-
 .../DateScalarArithmeticTimestampColumn.txt     |   6 +-
 .../FilterColumnBetweenDynamicValue.txt         |   2 +-
 ...terTimestampColumnCompareTimestampScalar.txt |   2 +-
 ...terTimestampScalarCompareTimestampColumn.txt |   2 +-
 ...ervalYearMonthColumnArithmeticDateColumn.txt |  28 +-
 ...ervalYearMonthColumnArithmeticDateScalar.txt |  16 +-
 ...YearMonthColumnArithmeticTimestampScalar.txt |   2 +-
 ...ervalYearMonthScalarArithmeticDateColumn.txt |  26 +-
 .../LongDoubleColumnCompareTimestampScalar.txt  |   2 +-
 .../TimestampColumnArithmeticDateColumn.txt     |  14 +-
 .../TimestampColumnArithmeticDateScalar.txt     |   6 +-
 ...TimestampColumnArithmeticTimestampScalar.txt |   2 +-
 .../TimestampColumnCompareTimestampScalar.txt   |   2 +-
 .../TimestampScalarArithmeticDateColumn.txt     |  16 +-
 ...pScalarArithmeticIntervalYearMonthColumn.txt |   2 +-
 ...TimestampScalarArithmeticTimestampColumn.txt |   2 +-
 .../TimestampScalarCompareTimestampColumn.txt   |   2 +-
 .../UDAFTemplates/VectorUDAFAvgTimestamp.txt    |   2 +-
 .../UDAFTemplates/VectorUDAFMinMaxTimestamp.txt |   2 +-
 .../hive/ql/exec/ColumnStatsUpdateTask.java     |   4 +-
 .../hadoop/hive/ql/exec/FunctionRegistry.java   |  14 +-
 .../hive/ql/exec/vector/TimestampUtils.java     |  29 +-
 .../hive/ql/exec/vector/VectorAssignRow.java    |  24 +-
 .../hive/ql/exec/vector/VectorBatchDebug.java   |   7 +-
 .../exec/vector/VectorColumnAssignFactory.java  |  19 +-
 .../ql/exec/vector/VectorDeserializeRow.java    |  14 +-
 .../hive/ql/exec/vector/VectorExtractRow.java   |  15 +-
 .../ql/exec/vector/VectorHashKeyWrapper.java    |   5 +-
 .../hive/ql/exec/vector/VectorSerializeRow.java |   6 +-
 .../ql/exec/vector/VectorizationContext.java    |  27 +-
 .../ql/exec/vector/VectorizedBatchUtil.java     |  41 +-
 .../ql/exec/vector/VectorizedRowBatchCtx.java   |  25 +-
 .../vector/expressions/CastDateToString.java    |  13 +-
 .../vector/expressions/CastDateToTimestamp.java |   4 +-
 .../exec/vector/expressions/CastLongToDate.java |   1 -
 .../vector/expressions/CastLongToTimestamp.java |   2 -
 .../CastMillisecondsLongToTimestamp.java        |   2 -
 .../vector/expressions/CastStringToDate.java    |  10 +-
 .../vector/expressions/CastTimestampToChar.java |  54 ++
 .../vector/expressions/CastTimestampToDate.java |   4 +-
 .../expressions/CastTimestampToDecimal.java     |   7 +-
 .../expressions/CastTimestampToDouble.java      |   2 -
 .../expressions/CastTimestampToString.java      |  68 ++
 .../expressions/CastTimestampToVarChar.java     |  55 ++
 .../expressions/ConstantVectorExpression.java   |   3 +-
 .../expressions/DateColSubtractDateColumn.java  |  29 +-
 .../expressions/DateColSubtractDateScalar.java  |  22 +-
 .../DateScalarSubtractDateColumn.java           |  18 +-
 .../vector/expressions/DecimalColumnInList.java |   1 -
 .../DynamicValueVectorExpression.java           |   6 +-
 .../expressions/TimestampToStringUnaryUDF.java  |   2 +-
 .../expressions/VectorExpressionWriter.java     |   4 +-
 .../VectorExpressionWriterFactory.java          |  23 +-
 .../expressions/VectorUDFDateAddColCol.java     |  19 +-
 .../expressions/VectorUDFDateAddColScalar.java  |  11 +-
 .../expressions/VectorUDFDateAddScalarCol.java  |  19 +-
 .../expressions/VectorUDFDateDiffColCol.java    |  19 +-
 .../expressions/VectorUDFDateDiffColScalar.java |  12 +-
 .../expressions/VectorUDFDateDiffScalarCol.java |  10 +-
 .../vector/expressions/VectorUDFDateLong.java   |   8 -
 .../vector/expressions/VectorUDFDateString.java |  11 -
 .../expressions/VectorUDFDateTimestamp.java     |   9 -
 .../expressions/VectorUDFDayOfWeekString.java   |   4 +-
 .../VectorUDFTimestampFieldDate.java            |   8 +-
 .../VectorUDFTimestampFieldString.java          |   4 +-
 .../VectorUDFTimestampFieldTimestamp.java       |   4 +-
 .../expressions/VectorUDFUnixTimeStampDate.java |   6 +-
 .../VectorUDFUnixTimeStampString.java           |  12 +-
 .../ql/exec/vector/udf/VectorUDFAdaptor.java    |  20 -
 .../hadoop/hive/ql/io/BatchToRowReader.java     |  34 +-
 .../apache/hadoop/hive/ql/io/orc/OrcFile.java   |  12 +
 .../hadoop/hive/ql/io/orc/RecordReaderImpl.java |  33 +-
 .../hadoop/hive/ql/io/orc/WriterImpl.java       |  15 +-
 .../ql/io/parquet/convert/ETypeConverter.java   |  18 +-
 .../serde/primitive/ParquetStringInspector.java |   8 +-
 .../ql/io/parquet/timestamp/NanoTimeUtils.java  |   8 +-
 .../parquet/vector/ParquetDataColumnReader.java |   2 +-
 .../vector/ParquetDataColumnReaderFactory.java  |   2 +-
 .../vector/VectorizedPrimitiveColumnReader.java |   5 +-
 .../ql/io/parquet/write/DataWritableWriter.java |  12 +-
 .../formatting/MetaDataFormatUtils.java         |   4 +-
 .../optimizer/FixedBucketPruningOptimizer.java  |  20 +-
 .../hive/ql/optimizer/StatsOptimizer.java       |   4 +-
 .../calcite/translator/ExprNodeConverter.java   |   4 +-
 .../calcite/translator/RexNodeConverter.java    |  17 +-
 .../hive/ql/parse/BaseSemanticAnalyzer.java     |  20 +-
 .../hive/ql/parse/TypeCheckProcFactory.java     |   5 +-
 .../ql/stats/ColumnStatisticsObjTranslator.java |   6 +-
 .../apache/hadoop/hive/ql/udf/UDFDateFloor.java |  19 +-
 .../hadoop/hive/ql/udf/UDFDayOfMonth.java       | 136 ++--
 .../apache/hadoop/hive/ql/udf/UDFDayOfWeek.java |  29 +-
 .../hadoop/hive/ql/udf/UDFFromUnixTime.java     |   2 +
 .../org/apache/hadoop/hive/ql/udf/UDFHour.java  | 132 ++--
 .../apache/hadoop/hive/ql/udf/UDFMinute.java    | 132 ++--
 .../org/apache/hadoop/hive/ql/udf/UDFMonth.java | 135 ++--
 .../apache/hadoop/hive/ql/udf/UDFSecond.java    | 136 ++--
 .../apache/hadoop/hive/ql/udf/UDFToBoolean.java |   8 +-
 .../apache/hadoop/hive/ql/udf/UDFToByte.java    |   4 +-
 .../apache/hadoop/hive/ql/udf/UDFToDouble.java  |   4 +-
 .../apache/hadoop/hive/ql/udf/UDFToFloat.java   |   4 +-
 .../apache/hadoop/hive/ql/udf/UDFToInteger.java |   4 +-
 .../apache/hadoop/hive/ql/udf/UDFToLong.java    |   4 +-
 .../apache/hadoop/hive/ql/udf/UDFToShort.java   |   5 +-
 .../apache/hadoop/hive/ql/udf/UDFToString.java  |   8 +-
 .../hadoop/hive/ql/udf/UDFWeekOfYear.java       |  32 +-
 .../org/apache/hadoop/hive/ql/udf/UDFYear.java  | 135 ++--
 .../hadoop/hive/ql/udf/generic/BaseMaskUDF.java |   9 +-
 .../ql/udf/generic/GenericUDAFBloomFilter.java  |   9 +-
 .../ql/udf/generic/GenericUDAFComputeStats.java |  16 +-
 .../hadoop/hive/ql/udf/generic/GenericUDF.java  |  79 +-
 .../ql/udf/generic/GenericUDFAddMonths.java     |  39 +-
 .../ql/udf/generic/GenericUDFCurrentDate.java   |  15 +-
 .../udf/generic/GenericUDFCurrentTimestamp.java |  15 +-
 .../hive/ql/udf/generic/GenericUDFDate.java     |  19 +-
 .../hive/ql/udf/generic/GenericUDFDateAdd.java  |  21 +-
 .../hive/ql/udf/generic/GenericUDFDateDiff.java |  31 +-
 .../ql/udf/generic/GenericUDFDateFormat.java    |  24 +-
 .../hive/ql/udf/generic/GenericUDFDateSub.java  |   4 +-
 .../udf/generic/GenericUDFFromUtcTimestamp.java |  47 +-
 .../ql/udf/generic/GenericUDFInBloomFilter.java |   9 +-
 .../hive/ql/udf/generic/GenericUDFLastDay.java  |  24 +-
 .../hive/ql/udf/generic/GenericUDFMask.java     |  10 +-
 .../hive/ql/udf/generic/GenericUDFMaskHash.java |   3 +-
 .../ql/udf/generic/GenericUDFMonthsBetween.java |  29 +-
 .../hive/ql/udf/generic/GenericUDFNextDay.java  |  31 +-
 .../ql/udf/generic/GenericUDFOPDTIMinus.java    |  16 +-
 .../ql/udf/generic/GenericUDFOPDTIPlus.java     |  16 +-
 .../hive/ql/udf/generic/GenericUDFQuarter.java  |   8 +-
 .../hive/ql/udf/generic/GenericUDFReflect2.java |   6 +-
 .../ql/udf/generic/GenericUDFTimestamp.java     |   2 +-
 .../udf/generic/GenericUDFToUnixTimeStamp.java  |  10 +-
 .../hive/ql/udf/generic/GenericUDFTrunc.java    |  59 +-
 .../ql/udf/generic/GenericUDFUnixTimeStamp.java |   3 +-
 .../hive/ql/udf/ptf/ValueBoundaryScanner.java   |  11 +-
 .../hadoop/hive/ql/util/DateTimeMath.java       | 304 ++++++--
 .../hive/ql/exec/TestFunctionRegistry.java      |  16 +-
 .../hadoop/hive/ql/exec/TestUtilities.java      |   5 +-
 .../ql/exec/persistence/TestRowContainer.java   |   6 +-
 .../TestTimestampWritableAndColumnVector.java   |   4 +-
 .../exec/vector/TestVectorGroupByOperator.java  |  12 +-
 .../exec/vector/TestVectorizationContext.java   |   2 +-
 .../ql/exec/vector/VectorRandomRowSource.java   |  15 +-
 .../hive/ql/exec/vector/VectorVerifyFast.java   |  20 +-
 .../expressions/TestVectorDateExpressions.java  |  58 +-
 .../TestVectorExpressionWriters.java            |  16 +-
 .../TestVectorGenericDateExpressions.java       |  17 +-
 .../expressions/TestVectorMathFunctions.java    |  10 +-
 .../TestVectorTimestampExpressions.java         |  96 ++-
 .../expressions/TestVectorTimestampExtract.java |  76 +-
 .../vector/expressions/TestVectorTypeCasts.java |  23 +-
 .../exec/vector/mapjoin/fast/VerifyFastRow.java |  21 +-
 .../vector/util/VectorizedRowGroupGenUtil.java  |   6 +-
 .../batchgen/VectorColumnGroupGenerator.java    |   6 +-
 .../io/arrow/TestArrowColumnarBatchSerDe.java   |  26 +-
 .../hive/ql/io/orc/TestInputOutputFormat.java   |   8 +-
 .../hadoop/hive/ql/io/orc/TestOrcFile.java      |  37 +-
 .../hive/ql/io/orc/TestOrcSerDeStats.java       |  16 +-
 .../hive/ql/io/orc/TestVectorizedORCReader.java |  29 +-
 .../parquet/VectorizedColumnReaderTestBase.java |  23 +-
 .../serde/TestParquetTimestampUtils.java        |  42 +-
 .../hive/ql/parse/TestSemanticAnalyzer.java     |   6 +-
 .../ql/udf/TestUDFDateFormatGranularity.java    |  39 +-
 .../ql/udf/generic/TestGenericUDFAddMonths.java |  52 +-
 .../hive/ql/udf/generic/TestGenericUDFDate.java |  38 +-
 .../ql/udf/generic/TestGenericUDFDateAdd.java   |  42 +-
 .../ql/udf/generic/TestGenericUDFDateDiff.java  |  26 +-
 .../udf/generic/TestGenericUDFDateFormat.java   |  44 +-
 .../ql/udf/generic/TestGenericUDFDateSub.java   |  42 +-
 .../generic/TestGenericUDFFromUtcTimestamp.java |   7 +-
 .../ql/udf/generic/TestGenericUDFGreatest.java  |  11 +-
 .../ql/udf/generic/TestGenericUDFLastDay.java   |  63 +-
 .../ql/udf/generic/TestGenericUDFLeast.java     |  11 +-
 .../generic/TestGenericUDFMonthsBetween.java    |  41 +-
 .../ql/udf/generic/TestGenericUDFNextDay.java   |  32 +-
 .../ql/udf/generic/TestGenericUDFNullif.java    |   8 +-
 .../ql/udf/generic/TestGenericUDFOPMinus.java   |  33 +-
 .../ql/udf/generic/TestGenericUDFOPPlus.java    |  57 +-
 .../ql/udf/generic/TestGenericUDFQuarter.java   |  39 +-
 .../ql/udf/generic/TestGenericUDFSortArray.java |  12 +-
 .../generic/TestGenericUDFToUnixTimestamp.java  |  25 +-
 .../ql/udf/generic/TestGenericUDFTrunc.java     | 171 +++--
 .../hadoop/hive/ql/util/TestDateTimeMath.java   |  26 +-
 .../test/queries/clientnegative/date_literal3.q |   3 -
 ...allowincompatible_vectorization_false_date.q |  29 +
 ql/src/test/queries/clientpositive/date_udf.q   |   2 +-
 .../queries/clientpositive/druid_timestamptz2.q |  60 ++
 .../test/queries/clientpositive/localtimezone.q |  42 +-
 .../queries/clientpositive/localtimezone2.q     |  55 ++
 .../queries/clientpositive/parquet_ppd_char.q   |   1 +
 .../clientpositive/parquet_vectorization_13.q   |  16 +-
 .../clientpositive/parquet_vectorization_7.q    |  16 +-
 .../queries/clientpositive/singletsinsertorc.q  |   6 +
 .../clientpositive/timestamp_comparison2.q      |   4 +-
 .../test/queries/clientpositive/timestamp_dst.q |   2 +
 .../test/queries/clientpositive/udf_reflect2.q  |   4 +-
 .../queries/clientpositive/vectorization_13.q   |  16 +-
 .../queries/clientpositive/vectorization_7.q    |  16 +-
 .../clientpositive/vectorization_decimal_date.q |   5 +-
 .../results/clientnegative/date_literal3.q.out  |   1 -
 .../beeline/udf_unix_timestamp.q.out            |   6 +-
 .../clientpositive/cast_on_constant.q.out       |  12 +-
 .../confirm_initial_tbl_stats.q.out             |   6 +-
 .../results/clientpositive/constprog_type.q.out |   4 +-
 .../test/results/clientpositive/date_udf.q.out  |   6 +-
 .../test/results/clientpositive/decimal_1.q.out |   2 +-
 .../test/results/clientpositive/decimal_2.q.out |   2 +-
 .../druid/druid_timestamptz2.q.out              | 308 ++++++++
 ql/src/test/results/clientpositive/foldts.q.out |   2 +-
 .../clientpositive/infer_join_preds.q.out       |   2 +-
 .../results/clientpositive/interval_alt.q.out   |   2 +-
 .../clientpositive/interval_arithmetic.q.out    |   8 +-
 .../llap/acid_vectorization_original.q.out      |  14 +-
 ...wincompatible_vectorization_false_date.q.out |  94 +++
 .../llap/current_date_timestamp.q.out           |  34 +-
 .../llap/default_constraint.q.out               |   2 +-
 .../insert_values_orig_table_use_metadata.q.out |  24 +-
 .../clientpositive/llap/llap_uncompressed.q.out |   2 +-
 .../clientpositive/llap/orc_analyze.q.out       |  34 +-
 .../results/clientpositive/llap/orc_llap.q.out  |   4 +-
 .../clientpositive/llap/orc_merge11.q.out       |  44 +-
 .../clientpositive/llap/orc_merge5.q.out        |   4 +-
 .../clientpositive/llap/orc_merge6.q.out        |   8 +-
 .../clientpositive/llap/orc_merge7.q.out        |   4 +-
 .../clientpositive/llap/orc_ppd_date.q.out      |  50 +-
 .../clientpositive/llap/orc_ppd_decimal.q.out   | 100 +--
 .../clientpositive/llap/orc_ppd_timestamp.q.out |  48 +-
 .../clientpositive/llap/orc_ppd_varchar.q.out   |  32 +-
 .../clientpositive/llap/results_cache_2.q.out   |   6 +-
 .../llap/schema_evol_orc_acid_part.q.out        |   8 +-
 .../schema_evol_orc_acid_part_llap_io.q.out     |   8 +-
 .../llap/schema_evol_orc_acid_table.q.out       |   8 +-
 .../schema_evol_orc_acid_table_llap_io.q.out    |   8 +-
 .../schema_evol_orc_acidvec_part_llap_io.q.out  |   8 +-
 .../llap/schema_evol_orc_acidvec_table.q.out    |   8 +-
 .../schema_evol_orc_acidvec_table_llap_io.q.out |   8 +-
 .../llap/schema_evol_orc_nonvec_part.q.out      |   8 +-
 ...chema_evol_orc_nonvec_part_all_complex.q.out |  16 +-
 ...ol_orc_nonvec_part_all_complex_llap_io.q.out |  16 +-
 ...ema_evol_orc_nonvec_part_all_primitive.q.out |  30 +-
 ..._orc_nonvec_part_all_primitive_llap_io.q.out |  30 +-
 .../schema_evol_orc_nonvec_part_llap_io.q.out   |   8 +-
 .../llap/schema_evol_orc_nonvec_table.q.out     |   8 +-
 .../schema_evol_orc_nonvec_table_llap_io.q.out  |   8 +-
 .../llap/schema_evol_orc_vec_part.q.out         |   8 +-
 .../schema_evol_orc_vec_part_all_complex.q.out  |  16 +-
 ..._evol_orc_vec_part_all_complex_llap_io.q.out |  16 +-
 ...schema_evol_orc_vec_part_all_primitive.q.out |  30 +-
 ...vol_orc_vec_part_all_primitive_llap_io.q.out |  30 +-
 .../llap/schema_evol_orc_vec_table.q.out        |   8 +-
 .../schema_evol_orc_vec_table_llap_io.q.out     |   8 +-
 ...ma_evol_text_nonvec_part_all_primitive.q.out |  24 +-
 ...text_nonvec_part_all_primitive_llap_io.q.out |  24 +-
 ...chema_evol_text_vec_part_all_primitive.q.out |  24 +-
 ...ol_text_vec_part_all_primitive_llap_io.q.out |  24 +-
 ...ma_evol_text_vecrow_part_all_primitive.q.out |  24 +-
 .../clientpositive/llap/singletsinsertorc.q.out |  28 +
 .../clientpositive/llap/update_all_types.q.out  |   4 +-
 .../llap/vector_aggregate_9.q.out               |   2 +-
 .../clientpositive/llap/vector_between_in.q.out |  88 +--
 .../llap/vector_binary_join_groupby.q.out       |   2 +-
 .../llap/vector_case_when_2.q.out               | 118 +--
 .../clientpositive/llap/vector_data_types.q.out |   4 +-
 .../clientpositive/llap/vector_decimal_1.q.out  |   2 +-
 .../clientpositive/llap/vector_decimal_2.q.out  |   6 +-
 .../llap/vector_decimal_cast.q.out              |  40 +-
 .../llap/vector_decimal_expressions.q.out       |  40 +-
 .../clientpositive/llap/vector_interval_1.q.out |  10 +-
 .../clientpositive/llap/vector_interval_2.q.out |  18 +-
 .../llap/vector_interval_arithmetic.q.out       | 272 +++----
 .../llap/vector_partitioned_date_time.q.out     |  56 +-
 .../llap/vector_ptf_part_simple.q.out           | 108 +--
 .../llap/vector_udf_adaptor_1.q.out             |  20 +-
 .../clientpositive/llap/vectorization_13.q.out  |  44 +-
 .../clientpositive/llap/vectorization_7.q.out   |  44 +-
 .../llap/vectorization_decimal_date.q.out       |  34 +-
 .../llap/vectorization_short_regress.q.out      |   8 +-
 .../clientpositive/llap/vectorized_casts.q.out  |  54 +-
 .../llap/vectorized_date_funcs.q.out            | 554 +++++++-------
 .../llap/vectorized_timestamp.q.out             |  14 +-
 .../llap/vectorized_timestamp_funcs.q.out       |  58 +-
 .../llap/vectorized_timestamp_ints_casts.q.out  | 104 +--
 .../clientpositive/llap_uncompressed.q.out      |   2 +-
 .../results/clientpositive/localtimezone.q.out  |  84 +--
 .../results/clientpositive/localtimezone2.q.out | 148 ++++
 .../results/clientpositive/orc_file_dump.q.out  |  12 +-
 .../results/clientpositive/orc_merge11.q.out    |  44 +-
 .../results/clientpositive/orc_merge12.q.out    | 644 ++++++++--------
 .../results/clientpositive/orc_merge5.q.out     |  24 +-
 .../results/clientpositive/orc_merge6.q.out     |  48 +-
 .../clientpositive/orc_merge_incompat1.q.out    |  10 +-
 .../clientpositive/orc_merge_incompat2.q.out    |  18 +-
 .../results/clientpositive/orc_ppd_char.q.out   |  36 +-
 .../parquet_vectorization_13.q.out              |  44 +-
 .../parquet_vectorization_7.q.out               |  44 +-
 .../parquet_vectorization_decimal_date.q.out    |  20 +-
 .../clientpositive/partition_timestamp.q.out    |  60 +-
 .../clientpositive/partition_timestamp2.q.out   | 250 +++----
 .../clientpositive/perf/spark/query12.q.out     |   4 +-
 .../clientpositive/perf/spark/query16.q.out     |   4 +-
 .../clientpositive/perf/spark/query20.q.out     |   4 +-
 .../clientpositive/perf/spark/query21.q.out     |   4 +-
 .../clientpositive/perf/spark/query32.q.out     |   8 +-
 .../clientpositive/perf/spark/query37.q.out     |   4 +-
 .../clientpositive/perf/spark/query40.q.out     |   4 +-
 .../clientpositive/perf/spark/query5.q.out      |   8 +-
 .../clientpositive/perf/spark/query77.q.out     |  20 +-
 .../clientpositive/perf/spark/query80.q.out     |  12 +-
 .../clientpositive/perf/spark/query82.q.out     |   4 +-
 .../clientpositive/perf/spark/query92.q.out     |   8 +-
 .../clientpositive/perf/spark/query94.q.out     |   4 +-
 .../clientpositive/perf/spark/query95.q.out     |   4 +-
 .../clientpositive/perf/spark/query98.q.out     |   4 +-
 .../clientpositive/perf/tez/query12.q.out       |   2 +-
 .../clientpositive/perf/tez/query16.q.out       |   2 +-
 .../clientpositive/perf/tez/query20.q.out       |   2 +-
 .../clientpositive/perf/tez/query21.q.out       |   2 +-
 .../clientpositive/perf/tez/query32.q.out       |   2 +-
 .../clientpositive/perf/tez/query37.q.out       |   2 +-
 .../clientpositive/perf/tez/query40.q.out       |   2 +-
 .../clientpositive/perf/tez/query5.q.out        |   2 +-
 .../clientpositive/perf/tez/query77.q.out       |   2 +-
 .../clientpositive/perf/tez/query80.q.out       |   2 +-
 .../clientpositive/perf/tez/query82.q.out       |   2 +-
 .../clientpositive/perf/tez/query92.q.out       |   2 +-
 .../clientpositive/perf/tez/query94.q.out       |   2 +-
 .../clientpositive/perf/tez/query95.q.out       |   2 +-
 .../clientpositive/perf/tez/query98.q.out       |   2 +-
 .../clientpositive/singletsinsertorc.q.out      |  28 +
 .../results/clientpositive/spark/date_udf.q.out |   6 +-
 .../clientpositive/spark/orc_merge5.q.out       |  32 +-
 .../clientpositive/spark/orc_merge6.q.out       |  48 +-
 .../clientpositive/spark/orc_merge7.q.out       |  34 +-
 .../clientpositive/spark/orc_merge8.q.out       |  10 +-
 .../clientpositive/spark/orc_merge9.q.out       |  16 +-
 .../spark/orc_merge_incompat1.q.out             |  22 +-
 .../spark/orc_merge_incompat2.q.out             |  34 +-
 .../spark/parquet_vectorization_13.q.out        |  44 +-
 .../spark/parquet_vectorization_7.q.out         |  44 +-
 .../parquet_vectorization_decimal_date.q.out    |  20 +-
 .../clientpositive/spark/timestamp_1.q.out      |  48 +-
 .../clientpositive/spark/timestamp_2.q.out      |  48 +-
 .../clientpositive/spark/timestamp_3.q.out      |   4 +-
 .../clientpositive/spark/timestamp_udf.q.out    |   4 +-
 .../spark/vector_between_in.q.out               |  88 +--
 .../spark/vector_data_types.q.out               |   4 +-
 .../clientpositive/spark/vectorization_13.q.out |  44 +-
 .../spark/vectorization_decimal_date.q.out      |  34 +-
 .../spark/vectorization_short_regress.q.out     |  28 +-
 .../spark/vectorized_timestamp_funcs.q.out      |  58 +-
 .../tez/acid_vectorization_original.q.out       | 740 +++++++++++++++++++
 .../tez/acid_vectorization_original_tez.q.out   |  38 +-
 .../clientpositive/tez/orc_merge12.q.out        | 644 ++++++++--------
 .../test/results/clientpositive/timestamp.q.out |   6 +-
 .../results/clientpositive/timestamp_1.q.out    |  48 +-
 .../results/clientpositive/timestamp_2.q.out    |  48 +-
 .../results/clientpositive/timestamp_3.q.out    |   4 +-
 .../clientpositive/timestamp_comparison2.q.out  |  12 +-
 .../results/clientpositive/timestamp_dst.q.out  |   9 +
 .../clientpositive/timestamp_formats.q.out      |  84 +--
 .../clientpositive/timestamp_ints_casts.q.out   | 104 +--
 .../clientpositive/timestamp_literal.q.out      |   2 +-
 .../results/clientpositive/timestamp_udf.q.out  |   4 +-
 .../results/clientpositive/timestamptz_3.q.out  |   4 +-
 .../results/clientpositive/typechangetest.q.out |  36 +-
 ql/src/test/results/clientpositive/udf5.q.out   |   4 +-
 .../clientpositive/udf_folder_constants.q.out   |   4 +-
 .../clientpositive/udf_from_utc_timestamp.q.out |   4 +-
 .../test/results/clientpositive/udf_mask.q.out  |   2 +-
 .../clientpositive/udf_mask_first_n.q.out       |   2 +-
 .../clientpositive/udf_mask_last_n.q.out        |   2 +-
 .../clientpositive/udf_mask_show_first_n.q.out  |   2 +-
 .../clientpositive/udf_mask_show_last_n.q.out   |   2 +-
 .../results/clientpositive/udf_reflect2.q.out   |  20 +-
 .../clientpositive/udf_to_unix_timestamp.q.out  |   6 +-
 .../clientpositive/udf_to_utc_timestamp.q.out   |   2 +-
 .../clientpositive/udf_unix_timestamp.q.out     |   6 +-
 .../clientpositive/update_all_types.q.out       |   4 +-
 .../clientpositive/vector_aggregate_9.q.out     |   2 +-
 .../vector_binary_join_groupby.q.out            |   2 +-
 .../clientpositive/vector_case_when_2.q.out     | 118 +--
 .../clientpositive/vector_data_types.q.out      |   4 +-
 .../clientpositive/vector_decimal_1.q.out       |   2 +-
 .../clientpositive/vector_decimal_cast.q.out    |  40 +-
 .../vector_decimal_expressions.q.out            |  40 +-
 .../clientpositive/vector_interval_1.q.out      |  10 +-
 .../vector_interval_arithmetic.q.out            | 272 +++----
 .../clientpositive/vectorization_13.q.out       |  44 +-
 .../clientpositive/vectorization_7.q.out        |  44 +-
 .../vectorization_decimal_date.q.out            |  34 +-
 .../clientpositive/vectorized_casts.q.out       |  54 +-
 .../clientpositive/vectorized_date_funcs.q.out  | 554 +++++++-------
 .../clientpositive/vectorized_timestamp.q.out   |  14 +-
 .../vectorized_timestamp_funcs.q.out            |  56 +-
 .../vectorized_timestamp_ints_casts.q.out       | 104 +--
 .../clientpositive/windowing_distinct.q.out     |  24 +-
 .../apache/hadoop/hive/serde2/JsonSerDe.java    |   7 +-
 .../hadoop/hive/serde2/RandomTypeUtil.java      | 189 +++++
 .../apache/hadoop/hive/serde2/RegexSerDe.java   |   4 +-
 .../hive/serde2/avro/AvroDeserializer.java      |  10 +-
 .../hadoop/hive/serde2/avro/AvroSerializer.java |  13 +-
 .../binarysortable/BinarySortableSerDe.java     |  18 +-
 .../fast/BinarySortableDeserializeRead.java     |   4 +-
 .../fast/BinarySortableSerializeWrite.java      |  14 +-
 .../hive/serde2/fast/DeserializeRead.java       |  12 +-
 .../hadoop/hive/serde2/fast/SerializeWrite.java |   4 +-
 .../hadoop/hive/serde2/io/DateWritableV2.java   | 154 ++++
 .../serde2/io/TimestampLocalTZWritable.java     |   4 +-
 .../hive/serde2/io/TimestampWritableV2.java     | 625 ++++++++++++++++
 .../hadoop/hive/serde2/lazy/LazyDate.java       |  12 +-
 .../hadoop/hive/serde2/lazy/LazyTimestamp.java  |  16 +-
 .../hadoop/hive/serde2/lazy/VerifyLazy.java     |  14 +-
 .../lazy/fast/LazySimpleDeserializeRead.java    |   2 +-
 .../lazy/fast/LazySimpleSerializeWrite.java     |  18 +-
 .../primitive/LazyDateObjectInspector.java      |   9 +-
 .../primitive/LazyTimestampObjectInspector.java |   6 +-
 .../hive/serde2/lazybinary/LazyBinaryDate.java  |   8 +-
 .../hive/serde2/lazybinary/LazyBinarySerDe.java |  10 +-
 .../serde2/lazybinary/LazyBinarySerDe2.java     |   8 +-
 .../serde2/lazybinary/LazyBinaryTimestamp.java  |   8 +-
 .../hive/serde2/lazybinary/LazyBinaryUtils.java |   4 +-
 .../fast/LazyBinaryDeserializeRead.java         |   4 +-
 .../fast/LazyBinarySerializeWrite.java          |  14 +-
 .../objectinspector/ObjectInspectorUtils.java   |  18 +-
 .../primitive/DateObjectInspector.java          |   7 +-
 .../JavaConstantDateObjectInspector.java        |   7 +-
 .../JavaConstantTimestampObjectInspector.java   |   7 +-
 .../primitive/JavaDateObjectInspector.java      |  31 +-
 .../primitive/JavaTimestampObjectInspector.java |  40 +-
 .../PrimitiveObjectInspectorConverter.java      |   8 +-
 .../PrimitiveObjectInspectorFactory.java        |   8 +-
 .../PrimitiveObjectInspectorUtils.java          |  62 +-
 .../primitive/SettableDateObjectInspector.java  |  13 +-
 .../SettableTimestampObjectInspector.java       |  13 +-
 .../primitive/TimestampObjectInspector.java     |   7 +-
 .../WritableConstantDateObjectInspector.java    |   9 +-
 ...ritableConstantTimestampObjectInspector.java |   9 +-
 .../primitive/WritableDateObjectInspector.java  |  37 +-
 .../WritableHiveCharObjectInspector.java        |  10 +-
 .../WritableHiveVarcharObjectInspector.java     |   6 +-
 .../WritableTimestampObjectInspector.java       |  38 +-
 .../hive/serde2/SerdeRandomRowSource.java       |   5 +-
 .../apache/hadoop/hive/serde2/VerifyFast.java   |  20 +-
 .../hive/serde2/binarysortable/MyTestClass.java |   6 +-
 .../binarysortable/MyTestPrimitiveClass.java    |  17 +-
 .../hadoop/hive/serde2/io/TestDateWritable.java | 237 ------
 .../hive/serde2/io/TestDateWritableV2.java      | 241 ++++++
 .../hive/serde2/io/TestTimestampWritable.java   | 520 -------------
 .../hive/serde2/io/TestTimestampWritableV2.java | 520 +++++++++++++
 .../hive/serde2/lazy/TestLazyPrimitive.java     |   5 +-
 .../serde2/lazybinary/MyTestClassBigger.java    |   7 +-
 .../serde2/lazybinary/MyTestClassSmaller.java   |   7 +-
 .../TestStandardObjectInspectors.java           |   6 +-
 .../TestPrimitiveObjectInspectorUtils.java      |  96 +--
 .../hive/metastore/MetaStoreDirectSql.java      |   9 +-
 .../hadoop/hive/metastore/parser/Filter.g       |   2 +
 .../hive/metastore/utils/MetaStoreUtils.java    |   2 +
 .../ql/exec/vector/TimestampColumnVector.java   |   2 +-
 .../hadoop/hive/serde2/io/DateWritable.java     |   1 +
 .../ql/exec/vector/TestStructColumnVector.java  |  22 +-
 .../apache/hadoop/hive/tools/GenVectorCode.java |  14 +-
 507 files changed, 10570 insertions(+), 7012 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/mr/TestHiveAccumuloTypes.java
----------------------------------------------------------------------
diff --git a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/mr/TestHiveAccumuloTypes.java b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/mr/TestHiveAccumuloTypes.java
index 926f572..2eeb7de 100644
--- a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/mr/TestHiveAccumuloTypes.java
+++ b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/mr/TestHiveAccumuloTypes.java
@@ -22,8 +22,7 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.sql.Date;
-import java.sql.Timestamp;
+import java.time.LocalDateTime;
 import java.util.Map.Entry;
 
 import org.apache.accumulo.core.client.BatchWriter;
@@ -39,14 +38,16 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.accumulo.AccumuloHiveConstants;
 import org.apache.hadoop.hive.accumulo.AccumuloHiveRow;
 import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDeParameters;
+import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.HiveChar;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.common.type.HiveVarchar;
+import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.ByteStream;
-import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampWritable;
+import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
 import org.apache.hadoop.hive.serde2.lazy.ByteArrayRef;
 import org.apache.hadoop.hive.serde2.lazy.LazyBoolean;
 import org.apache.hadoop.hive.serde2.lazy.LazyByte;
@@ -234,17 +235,17 @@ public class TestHiveAccumuloTypes {
 
     // date
     baos.reset();
-    Date now = new Date(System.currentTimeMillis());
-    DateWritable dateWritable = new DateWritable(now);
+    Date now = Date.ofEpochMilli(System.currentTimeMillis());
+    DateWritableV2 dateWritable = new DateWritableV2(now);
     Date dateValue = dateWritable.get();
     dateWritable.write(out);
     m.put(cfBytes, "date".getBytes(), baos.toByteArray());
 
     // tiemestamp
     baos.reset();
-    Timestamp timestampValue = new Timestamp(now.getTime());
+    Timestamp timestampValue = Timestamp.ofEpochMilli(System.currentTimeMillis());
     ByteStream.Output output = new ByteStream.Output();
-    TimestampWritable timestampWritable = new TimestampWritable(new Timestamp(now.getTime()));
+    TimestampWritableV2 timestampWritable = new TimestampWritableV2(timestampValue);
     timestampWritable.write(new DataOutputStream(output));
     output.close();
     m.put(cfBytes, "timestamp".getBytes(), output.toByteArray());
@@ -587,8 +588,8 @@ public class TestHiveAccumuloTypes {
     m.put(cfBytes, "decimal".getBytes(), baos.toByteArray());
 
     // date
-    Date now = new Date(System.currentTimeMillis());
-    DateWritable dateWritable = new DateWritable(now);
+    Date now = Date.ofEpochMilli(System.currentTimeMillis());
+    DateWritableV2 dateWritable = new DateWritableV2(now);
     Date dateValue = dateWritable.get();
     baos.reset();
     JavaDateObjectInspector dateOI = (JavaDateObjectInspector) PrimitiveObjectInspectorFactory
@@ -598,7 +599,7 @@ public class TestHiveAccumuloTypes {
     m.put(cfBytes, "date".getBytes(), baos.toByteArray());
 
     // timestamp
-    Timestamp timestampValue = new Timestamp(now.getTime());
+    Timestamp timestampValue = Timestamp.valueOf(LocalDateTime.now().toString());
     baos.reset();
     JavaTimestampObjectInspector timestampOI = (JavaTimestampObjectInspector) PrimitiveObjectInspectorFactory
         .getPrimitiveJavaObjectInspector(TypeInfoFactory

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
----------------------------------------------------------------------
diff --git a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
index 5f3baab..9df2aad 100644
--- a/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
+++ b/accumulo-handler/src/test/org/apache/hadoop/hive/accumulo/predicate/TestAccumuloRangeGenerator.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.hive.accumulo.TestAccumuloDefaultIndexScanner;
 import org.apache.hadoop.hive.accumulo.columns.ColumnEncoding;
 import org.apache.hadoop.hive.accumulo.columns.HiveAccumuloRowIdColumnMapping;
 import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDeParameters;
+import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker;
 import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher;
 import org.apache.hadoop.hive.ql.lib.Dispatcher;
@@ -52,7 +53,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.sql.Date;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hadoop/hive/common/type/Date.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/type/Date.java b/common/src/java/org/apache/hadoop/hive/common/type/Date.java
new file mode 100644
index 0000000..6ecfcf6
--- /dev/null
+++ b/common/src/java/org/apache/hadoop/hive/common/type/Date.java
@@ -0,0 +1,181 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.common.type;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
+import java.time.format.ResolverStyle;
+import java.time.format.SignStyle;
+
+import static java.time.temporal.ChronoField.DAY_OF_MONTH;
+import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
+import static java.time.temporal.ChronoField.YEAR;
+
+/**
+ * This is the internal type for Date.
+ * The full qualified input format of Date is "yyyy-MM-dd".
+ */
+public class Date implements Comparable<Date> {
+
+  private static final LocalDate EPOCH = LocalDate.of(1970, 1, 1);
+  private static final DateTimeFormatter PARSE_FORMATTER;
+  private static final DateTimeFormatter PRINT_FORMATTER;
+  static {
+    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
+    builder.appendValue(YEAR, 1, 10, SignStyle.NORMAL)
+        .appendLiteral('-')
+        .appendValue(MONTH_OF_YEAR, 1, 2, SignStyle.NORMAL)
+        .appendLiteral('-')
+        .appendValue(DAY_OF_MONTH, 1, 2, SignStyle.NORMAL);
+    PARSE_FORMATTER = builder.toFormatter().withResolverStyle(ResolverStyle.LENIENT);
+    builder = new DateTimeFormatterBuilder();
+    builder.append(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+    PRINT_FORMATTER = builder.toFormatter();
+  }
+
+  private LocalDate localDate;
+
+  private Date(LocalDate localDate) {
+    this.localDate = localDate != null ? localDate : EPOCH;
+  }
+
+  public Date() {
+    this(EPOCH);
+  }
+
+  public Date(Date d) {
+    this(d.localDate);
+  }
+
+  @Override
+  public String toString() {
+    return localDate.format(PRINT_FORMATTER);
+  }
+
+  public int hashCode() {
+    return localDate.hashCode();
+  }
+
+  @Override
+  public boolean equals(Object other) {
+    if (other instanceof Date) {
+      return compareTo((Date) other) == 0;
+    }
+    return false;
+  }
+
+  @Override
+  public int compareTo(Date o) {
+    return localDate.compareTo(o.localDate);
+  }
+
+  public int toEpochDay() {
+    return (int) localDate.toEpochDay();
+  }
+
+  public long toEpochSecond() {
+    return localDate.atStartOfDay().toEpochSecond(ZoneOffset.UTC);
+  }
+
+  public long toEpochMilli() {
+    return localDate.atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli();
+  }
+
+  public void setYear(int year) {
+    localDate = localDate.withYear(year);
+  }
+
+  public void setMonth(int month) {
+    localDate = localDate.withMonth(month);
+  }
+
+  public void setDayOfMonth(int dayOfMonth) {
+    localDate = localDate.withDayOfMonth(dayOfMonth);
+  }
+
+  public void setTimeInDays(int epochDay) {
+    localDate = LocalDate.ofEpochDay(epochDay);
+  }
+
+  public void setTimeInMillis(long epochMilli) {
+    localDate = LocalDateTime.ofInstant(
+        Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC).toLocalDate();
+  }
+
+  public static Date valueOf(String s) {
+    s = s.trim();
+    int idx = s.indexOf(" ");
+    if (idx != -1) {
+      s = s.substring(0, idx);
+    }
+    LocalDate localDate;
+    try {
+      localDate = LocalDate.parse(s, PARSE_FORMATTER);
+    } catch (DateTimeParseException e) {
+      throw new IllegalArgumentException("Cannot create date, parsing error");
+    }
+    return new Date(localDate);
+  }
+
+  public static Date ofEpochDay(int epochDay) {
+    return new Date(LocalDate.ofEpochDay(epochDay));
+  }
+
+  public static Date ofEpochMilli(long epochMilli) {
+    return new Date(LocalDateTime.ofInstant(
+        Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC).toLocalDate());
+  }
+
+  public static Date of(int year, int month, int dayOfMonth) {
+    return new Date(LocalDate.of(year, month, dayOfMonth));
+  }
+
+  public int getYear() {
+    return localDate.getYear();
+  }
+
+  public int getMonth() {
+    return localDate.getMonthValue();
+  }
+
+  public int getDay() {
+    return localDate.getDayOfMonth();
+  }
+
+  public int lengthOfMonth() {
+    return localDate.lengthOfMonth();
+  }
+
+  public int getDayOfWeek() {
+    return localDate.getDayOfWeek().plus(1).getValue();
+  }
+
+  /**
+   * Return a copy of this object.
+   */
+  public Object clone() {
+    // LocalDateTime is immutable.
+    return new Date(this.localDate);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hadoop/hive/common/type/Timestamp.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/type/Timestamp.java b/common/src/java/org/apache/hadoop/hive/common/type/Timestamp.java
new file mode 100644
index 0000000..a8b7b6d
--- /dev/null
+++ b/common/src/java/org/apache/hadoop/hive/common/type/Timestamp.java
@@ -0,0 +1,235 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.common.type;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
+import java.time.format.ResolverStyle;
+import java.time.format.SignStyle;
+import java.time.temporal.ChronoField;
+
+import static java.time.temporal.ChronoField.DAY_OF_MONTH;
+import static java.time.temporal.ChronoField.HOUR_OF_DAY;
+import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
+import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
+import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
+import static java.time.temporal.ChronoField.YEAR;
+
+/**
+ * This is the internal type for Timestamp.
+ * The full qualified input format of Timestamp is
+ * "yyyy-MM-dd HH:mm:ss[.SSS...]", where the time part is optional.
+ * If time part is absent, a default '00:00:00.0' will be used.
+ */
+public class Timestamp implements Comparable<Timestamp> {
+  
+  private static final LocalDateTime EPOCH = LocalDateTime.of(1970, 1, 1, 0, 0, 0);
+  private static final DateTimeFormatter PARSE_FORMATTER;
+  private static final DateTimeFormatter PRINT_FORMATTER;
+
+  static {
+    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
+    // Date part
+    builder.appendValue(YEAR, 1, 10, SignStyle.NORMAL)
+        .appendLiteral('-')
+        .appendValue(MONTH_OF_YEAR, 1, 2, SignStyle.NORMAL)
+        .appendLiteral('-')
+        .appendValue(DAY_OF_MONTH, 1, 2, SignStyle.NORMAL);
+    // Time part
+    builder
+        .optionalStart().appendLiteral(" ")
+        .appendValue(HOUR_OF_DAY, 1, 2, SignStyle.NORMAL)
+        .appendLiteral(':')
+        .appendValue(MINUTE_OF_HOUR, 1, 2, SignStyle.NORMAL)
+        .appendLiteral(':')
+        .appendValue(SECOND_OF_MINUTE, 1, 2, SignStyle.NORMAL)
+        .optionalStart().appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true).optionalEnd()
+        .optionalEnd();
+    PARSE_FORMATTER = builder.toFormatter().withResolverStyle(ResolverStyle.LENIENT);
+    builder = new DateTimeFormatterBuilder();
+    // Date and time parts
+    builder.append(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    // Fractional part
+    builder.optionalStart().appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true).optionalEnd();
+    PRINT_FORMATTER = builder.toFormatter();
+  }
+
+  private LocalDateTime localDateTime;
+
+  /* Private constructor */
+  private Timestamp(LocalDateTime localDateTime) {
+    this.localDateTime = localDateTime != null ? localDateTime : EPOCH;
+  }
+
+  public Timestamp() {
+    this(EPOCH);
+  }
+
+  public Timestamp(Timestamp t) {
+    this(t.localDateTime);
+  }
+
+  public void set(Timestamp t) {
+    this.localDateTime = t != null ? t.localDateTime : EPOCH;
+  }
+
+  public String format(DateTimeFormatter formatter) {
+    return localDateTime.format(formatter);
+  }
+
+  @Override
+  public String toString() {
+    return localDateTime.format(PRINT_FORMATTER);
+  }
+
+  public int hashCode() {
+    return localDateTime.hashCode();
+  }
+
+  @Override
+  public boolean equals(Object other) {
+    if (other instanceof Timestamp) {
+      return compareTo((Timestamp) other) == 0;
+    }
+    return false;
+  }
+
+  @Override
+  public int compareTo(Timestamp o) {
+    return localDateTime.compareTo(o.localDateTime);
+  }
+
+  public long toEpochSecond() {
+    return localDateTime.toEpochSecond(ZoneOffset.UTC);
+  }
+
+  public void setTimeInSeconds(long epochSecond) {
+    setTimeInSeconds(epochSecond, 0);
+  }
+
+  public void setTimeInSeconds(long epochSecond, int nanos) {
+    localDateTime = LocalDateTime.ofEpochSecond(
+        epochSecond, nanos, ZoneOffset.UTC);
+  }
+
+  public long toEpochMilli() {
+    return localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();
+  }
+
+  public void setTimeInMillis(long epochMilli) {
+    localDateTime = LocalDateTime.ofInstant(
+        Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC);
+  }
+
+  public void setTimeInMillis(long epochMilli, int nanos) {
+    localDateTime = LocalDateTime
+        .ofInstant(Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC)
+        .withNano(nanos);
+  }
+
+  public int getNanos() {
+    return localDateTime.getNano();
+  }
+
+  public static Timestamp valueOf(String s) {
+    s = s.trim();
+    LocalDateTime localDateTime;
+    try {
+      localDateTime = LocalDateTime.parse(s, PARSE_FORMATTER);
+    } catch (DateTimeParseException e) {
+      // Try ISO-8601 format
+      try {
+        localDateTime = LocalDateTime.parse(s);
+      } catch (DateTimeParseException e2) {
+        throw new IllegalArgumentException("Cannot create timestamp, parsing error");
+      }
+    }
+    return new Timestamp(localDateTime);
+  }
+
+  public static Timestamp ofEpochSecond(long epochSecond) {
+    return ofEpochSecond(epochSecond, 0);
+  }
+
+  public static Timestamp ofEpochSecond(long epochSecond, int nanos) {
+    return new Timestamp(
+        LocalDateTime.ofEpochSecond(epochSecond, nanos, ZoneOffset.UTC));
+  }
+
+  public static Timestamp ofEpochMilli(long epochMilli) {
+    return new Timestamp(LocalDateTime
+        .ofInstant(Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC));
+  }
+
+  public static Timestamp ofEpochMilli(long epochMilli, int nanos) {
+    return new Timestamp(LocalDateTime
+        .ofInstant(Instant.ofEpochMilli(epochMilli), ZoneOffset.UTC)
+        .withNano(nanos));
+  }
+
+  public void setNanos(int nanos) {
+    localDateTime = localDateTime.withNano(nanos);
+  }
+
+  public int getYear() {
+    return localDateTime.getYear();
+  }
+
+  public int getMonth() {
+    return localDateTime.getMonthValue();
+  }
+
+  public int getDay() {
+    return localDateTime.getDayOfMonth();
+  }
+
+  public int getHours() {
+    return localDateTime.getHour();
+  }
+
+  public int getMinutes() {
+    return localDateTime.getMinute();
+  }
+
+  public int getSeconds() {
+    return localDateTime.getSecond();
+  }
+
+  public int getDayOfWeek() {
+    return localDateTime.getDayOfWeek().plus(1).getValue();
+  }
+
+  /**
+   * Return a copy of this object.
+   */
+  public Object clone() {
+    // LocalDateTime is immutable.
+    return new Timestamp(this.localDateTime);
+  }
+
+  public java.sql.Timestamp toSqlTimestamp() {
+    java.sql.Timestamp ts = new java.sql.Timestamp(toEpochMilli());
+    ts.setNanos(getNanos());
+    return ts;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hadoop/hive/common/type/TimestampTZUtil.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/type/TimestampTZUtil.java b/common/src/java/org/apache/hadoop/hive/common/type/TimestampTZUtil.java
index 90ffddb..213650c 100644
--- a/common/src/java/org/apache/hadoop/hive/common/type/TimestampTZUtil.java
+++ b/common/src/java/org/apache/hadoop/hive/common/type/TimestampTZUtil.java
@@ -17,7 +17,6 @@
  */
 package org.apache.hadoop.hive.common.type;
 
-import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.time.DateTimeException;
@@ -31,7 +30,6 @@ import java.time.format.DateTimeParseException;
 import java.time.format.TextStyle;
 import java.time.temporal.ChronoField;
 import java.time.temporal.TemporalAccessor;
-import java.util.Date;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -45,9 +43,6 @@ public class TimestampTZUtil {
   private static final LocalTime DEFAULT_LOCAL_TIME = LocalTime.of(0, 0);
   private static final Pattern SINGLE_DIGIT_PATTERN = Pattern.compile("[\\+-]\\d:\\d\\d");
 
-  private static final ThreadLocal<DateFormat> CONVERT_FORMATTER =
-      ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
-
   static final DateTimeFormatter FORMATTER;
   static {
     DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
@@ -126,11 +121,14 @@ public class TimestampTZUtil {
     }
   }
 
-  // Converts Date to TimestampTZ. The conversion is done text-wise since
-  // Date/Timestamp should be treated as description of date/time.
+  // Converts Date to TimestampTZ.
   public static TimestampTZ convert(Date date, ZoneId defaultTimeZone) {
-    String s = date instanceof Timestamp ? date.toString() : CONVERT_FORMATTER.get().format(date);
-    return parse(s, defaultTimeZone);
+    return parse(date.toString(), defaultTimeZone);
+  }
+
+  // Converts Timestamp to TimestampTZ.
+  public static TimestampTZ convert(Timestamp ts, ZoneId defaultTimeZone) {
+    return parse(ts.toString(), defaultTimeZone);
   }
 
   public static ZoneId parseTimeZone(String timeZoneStr) {

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hadoop/hive/common/type/TimestampUtils.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/type/TimestampUtils.java b/common/src/java/org/apache/hadoop/hive/common/type/TimestampUtils.java
new file mode 100644
index 0000000..ab60db1
--- /dev/null
+++ b/common/src/java/org/apache/hadoop/hive/common/type/TimestampUtils.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.common.type;
+
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
+
+import java.math.BigDecimal;
+import java.time.DateTimeException;
+
+/**
+ * Utilities for Timestamps and the relevant conversions.
+ */
+public class TimestampUtils {
+  public static final BigDecimal BILLION_BIG_DECIMAL = BigDecimal.valueOf(1000000000);
+
+  /**
+   * Convert the timestamp to a double measured in seconds.
+   * @return double representation of the timestamp, accurate to nanoseconds
+   */
+  public static double getDouble(Timestamp ts) {
+    long seconds = ts.toEpochSecond();
+    return seconds + ((double) ts.getNanos()) / 1000000000;
+  }
+
+  public static Timestamp doubleToTimestamp(double f) {
+    try {
+      long seconds = (long) f;
+
+      // We must ensure the exactness of the double's fractional portion.
+      // 0.6 as the fraction part will be converted to 0.59999... and
+      // significantly reduce the savings from binary serialization
+      BigDecimal bd = new BigDecimal(String.valueOf(f));
+
+      bd = bd.subtract(new BigDecimal(seconds)).multiply(new BigDecimal(1000000000));
+      int nanos = bd.intValue();
+
+      // Convert to millis
+      long millis = seconds * 1000;
+      if (nanos < 0) {
+        millis -= 1000;
+        nanos += 1000000000;
+      }
+
+      return Timestamp.ofEpochMilli(millis, nanos);
+    } catch (IllegalArgumentException | DateTimeException nfe) {
+      return null;
+    }
+  }
+
+  /**
+   * Take a HiveDecimal and return the timestamp representation where the fraction part is the
+   * nanoseconds and integer part is the number of seconds.
+   * @param dec
+   * @return
+   */
+  public static Timestamp decimalToTimestamp(HiveDecimal dec) {
+    try {
+      HiveDecimalWritable nanosWritable = new HiveDecimalWritable(dec);
+      nanosWritable.mutateFractionPortion();               // Clip off seconds portion.
+      nanosWritable.mutateScaleByPowerOfTen(9);            // Bring nanoseconds into integer portion.
+      if (!nanosWritable.isSet() || !nanosWritable.isInt()) {
+        return null;
+      }
+      int nanos = nanosWritable.intValue();
+      if (nanos < 0) {
+        nanos += 1000000000;
+      }
+      nanosWritable.setFromLong(nanos);
+
+      HiveDecimalWritable nanoInstant = new HiveDecimalWritable(dec);
+      nanoInstant.mutateScaleByPowerOfTen(9);
+
+      nanoInstant.mutateSubtract(nanosWritable);
+      nanoInstant.mutateScaleByPowerOfTen(-9);              // Back to seconds.
+      if (!nanoInstant.isSet() || !nanoInstant.isLong()) {
+        return null;
+      }
+      long millis = nanoInstant.longValue() * 1000;
+      return Timestamp.ofEpochMilli(millis, nanos);
+    } catch (IllegalArgumentException | DateTimeException nfe) {
+      // E.g. DateTimeException: Invalid value for Year (valid values -999999999 - 999999999)
+      return null;
+    }
+  }
+
+  /**
+   * Take a HiveDecimalWritable and return the timestamp representation where the fraction part
+   * is the nanoseconds and integer part is the number of seconds.
+   *
+   * This is a HiveDecimalWritable variation with supplied scratch objects.
+   * @param decWritable
+   * @param scratchDecWritable1
+   * @param scratchDecWritable2
+   * @return
+   */
+  public static Timestamp decimalToTimestamp(
+      HiveDecimalWritable decWritable,
+      HiveDecimalWritable scratchDecWritable1, HiveDecimalWritable scratchDecWritable2) {
+
+    HiveDecimalWritable nanosWritable = scratchDecWritable1;
+    nanosWritable.set(decWritable);
+    nanosWritable.mutateFractionPortion();               // Clip off seconds portion.
+    nanosWritable.mutateScaleByPowerOfTen(9);            // Bring nanoseconds into integer portion.
+    if (!nanosWritable.isSet() || !nanosWritable.isInt()) {
+      return null;
+    }
+    int nanos = nanosWritable.intValue();
+    if (nanos < 0) {
+      nanos += 1000000000;
+    }
+    nanosWritable.setFromLong(nanos);
+
+    HiveDecimalWritable nanoInstant = scratchDecWritable2;
+    nanoInstant.set(decWritable);
+    nanoInstant.mutateScaleByPowerOfTen(9);
+
+    nanoInstant.mutateSubtract(nanosWritable);
+    nanoInstant.mutateScaleByPowerOfTen(-9);              // Back to seconds.
+    if (!nanoInstant.isSet() || !nanoInstant.isLong()) {
+      return null;
+    }
+    long seconds = nanoInstant.longValue();
+
+    return Timestamp.ofEpochSecond(seconds, nanos);
+  }
+
+  public static Timestamp decimalToTimestamp(HiveDecimalV1 dec) {
+    try {
+      BigDecimal nanoInstant = dec.bigDecimalValue().multiply(BILLION_BIG_DECIMAL);
+      int nanos = nanoInstant.remainder(BILLION_BIG_DECIMAL).intValue();
+      if (nanos < 0) {
+        nanos += 1000000000;
+      }
+      long seconds =
+          nanoInstant.subtract(new BigDecimal(nanos)).divide(BILLION_BIG_DECIMAL).longValue();
+
+      return Timestamp.ofEpochSecond(seconds, nanos);
+    } catch (IllegalArgumentException | DateTimeException nfe) {
+      return null;
+    }
+  }
+
+  /**
+   * Rounds the number of milliseconds relative to the epoch down to the nearest whole number of
+   * seconds. 500 would round to 0, -500 would round to -1.
+   */
+  public static long millisToSeconds(long millis) {
+    if (millis >= 0) {
+      return millis / 1000;
+    } else {
+      return (millis - 999) / 1000;
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index fc3f752..9e9e987 100644
--- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@ -1893,7 +1893,7 @@ public class HiveConf extends Configuration {
         "Maximum fraction of heap that can be used by Parquet file writers in one task.\n" +
         "It is for avoiding OutOfMemory error in tasks. Work with Parquet 1.6.0 and above.\n" +
         "This config parameter is defined in Parquet, so that it does not start with 'hive.'."),
-    HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION("hive.parquet.timestamp.skip.conversion", true,
+    HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION("hive.parquet.timestamp.skip.conversion", false,
       "Current Hive implementation of parquet stores timestamps to UTC, this flag allows skipping of the conversion" +
       "on reading parquet files from other tools"),
     HIVE_INT_TIMESTAMP_CONVERSION_IN_SECONDS("hive.int.timestamp.conversion.in.seconds", false,

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hive/common/util/DateParser.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/common/util/DateParser.java b/common/src/java/org/apache/hive/common/util/DateParser.java
index 949fdba..5db14f1 100644
--- a/common/src/java/org/apache/hive/common/util/DateParser.java
+++ b/common/src/java/org/apache/hive/common/util/DateParser.java
@@ -17,24 +17,18 @@
  */
 package org.apache.hive.common.util;
 
-import java.sql.Date;
-import java.text.ParsePosition;
-import java.text.SimpleDateFormat;
+import org.apache.hadoop.hive.common.type.Date;
 
 /**
  * Date parser class for Hive.
  */
 public class DateParser {
-  private final SimpleDateFormat formatter;
-  private final ParsePosition pos;
+
   public DateParser() {
-    formatter = new SimpleDateFormat("yyyy-MM-dd");
-    // TODO: ideally, we should set formatter.setLenient(false);
-    pos = new ParsePosition(0);
-  }
+ }
 
   public Date parseDate(String strValue) {
-    Date result = new Date(0);
+    Date result = new Date();
     if (parseDate(strValue, result)) {
       return result;
     }
@@ -42,12 +36,16 @@ public class DateParser {
   }
 
   public boolean parseDate(String strValue, Date result) {
-    pos.setIndex(0);
-    java.util.Date parsedVal = formatter.parse(strValue, pos);
+    Date parsedVal;
+    try {
+      parsedVal = Date.valueOf(strValue);
+    } catch (IllegalArgumentException e) {
+      parsedVal = null;
+    }
     if (parsedVal == null) {
       return false;
     }
-    result.setTime(parsedVal.getTime());
+    result.setTimeInMillis(parsedVal.toEpochMilli());
     return true;
   }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hive/common/util/DateUtils.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/common/util/DateUtils.java b/common/src/java/org/apache/hive/common/util/DateUtils.java
index 65f3b94..e70de28 100644
--- a/common/src/java/org/apache/hive/common/util/DateUtils.java
+++ b/common/src/java/org/apache/hive/common/util/DateUtils.java
@@ -20,6 +20,7 @@ package org.apache.hive.common.util;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.TimeZone;
 
 /**
  * DateUtils. Thread-safe class
@@ -32,6 +33,7 @@ public class DateUtils {
     protected SimpleDateFormat initialValue() {
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
       simpleDateFormat.setLenient(false);
+      simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
       return simpleDateFormat;
     }
   };

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/java/org/apache/hive/common/util/TimestampParser.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/common/util/TimestampParser.java b/common/src/java/org/apache/hive/common/util/TimestampParser.java
index f674b5d..d30ab88 100644
--- a/common/src/java/org/apache/hive/common/util/TimestampParser.java
+++ b/common/src/java/org/apache/hive/common/util/TimestampParser.java
@@ -18,19 +18,18 @@
 
 package org.apache.hive.common.util;
 
-import java.math.BigDecimal;
-import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.hadoop.hive.common.type.Timestamp;
 import org.joda.time.DateTime;
-import org.joda.time.IllegalInstantException;
+import org.joda.time.LocalDateTime;
 import org.joda.time.MutableDateTime;
 import org.joda.time.DateTimeFieldType;
+import org.joda.time.chrono.ISOChronology;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.DateTimeFormatterBuilder;
@@ -52,19 +51,8 @@ public class TimestampParser {
 
   protected final static String[] stringArray = new String[] {};
   protected final static String millisFormatString = "millis";
-  @Nullable
-  private final static DateTime startingDateValue = makeStartingDateValue();
-
-  @Nullable
-  private static DateTime makeStartingDateValue() {
-    try {
-      return new DateTime(1970, 1, 1, 0, 0, 0, 0);
-    } catch (IllegalInstantException e) {
-      // 1970-01-01 00:00:00 did not exist in some zones. In these zones, we need to take different,
-      // less optimal parsing route.
-      return null;
-    }
-  }
+  protected final static DateTime startingDateValue =
+      new DateTime(1970, 1, 1, 0, 0, 0, 0, ISOChronology.getInstanceUTC());
 
   protected String[] formatStrings = null;
   protected DateTimeFormatter fmt = null;
@@ -126,21 +114,24 @@ public class TimestampParser {
 
     if (startingDateValue != null) {
       // reset value in case any date fields are missing from the date pattern
-      MutableDateTime mdt = new MutableDateTime(startingDateValue);
+      MutableDateTime mdt = new MutableDateTime(
+          startingDateValue, ISOChronology.getInstanceUTC());
 
       // Using parseInto() avoids throwing exception when parsing,
       // allowing fallback to default timestamp parsing if custom patterns fail.
       int ret = fmt.parseInto(mdt, strValue, 0);
       // Only accept parse results if we parsed the entire string
       if (ret == strValue.length()) {
-        return Optional.of(new Timestamp(mdt.getMillis()));
+        return Optional.of(Timestamp.ofEpochMilli(mdt.getMillis()));
       }
       return Optional.empty();
     }
 
     try {
-      DateTime dt = fmt.parseDateTime(strValue);
-      return Optional.of(new Timestamp(dt.getMillis()));
+      LocalDateTime dt = fmt.parseLocalDateTime(strValue);
+      return Optional.of(
+          Timestamp.ofEpochMilli(
+              dt.toDateTime(ISOChronology.getInstanceUTC().getZone()).getMillis()));
     } catch (IllegalArgumentException e) {
       return Optional.empty();
     }
@@ -181,7 +172,8 @@ public class TimestampParser {
 
       // Joda DateTime only has precision to millis, cut off any fractional portion
       long millis = Long.parseLong(matcher.group(1));
-      DateTime dt = new DateTime(millis);
+      DateTime dt =
+          new DateTime(millis, ISOChronology.getInstanceUTC());
       for (DateTimeFieldType field : dateTimeFields) {
         bucket.saveField(field, dt.get(field));
       }

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimalOrcSerializationUtils.java
----------------------------------------------------------------------
diff --git a/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimalOrcSerializationUtils.java b/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimalOrcSerializationUtils.java
index 72dce4d..1435339 100644
--- a/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimalOrcSerializationUtils.java
+++ b/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimalOrcSerializationUtils.java
@@ -17,26 +17,18 @@
  */
 package org.apache.hadoop.hive.common.type;
 
-import java.sql.Timestamp;
 import java.util.Random;
-import java.util.Arrays;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-import org.apache.hadoop.hive.serde2.io.HiveDecimalWritableV1;
-import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.orc.impl.SerializationUtils;
 import org.apache.hadoop.hive.common.type.RandomTypeUtil;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.StringExpr;
-import org.apache.hadoop.hive.ql.util.TimestampUtils;
 
 import com.google.code.tempusfugit.concurrency.annotations.*;
-import com.google.code.tempusfugit.concurrency.*;
 
 import org.junit.*;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/test/org/apache/hadoop/hive/common/type/TestTimestampTZ.java
----------------------------------------------------------------------
diff --git a/common/src/test/org/apache/hadoop/hive/common/type/TestTimestampTZ.java b/common/src/test/org/apache/hadoop/hive/common/type/TestTimestampTZ.java
index 5a3f048..cd23abe 100644
--- a/common/src/test/org/apache/hadoop/hive/common/type/TestTimestampTZ.java
+++ b/common/src/test/org/apache/hadoop/hive/common/type/TestTimestampTZ.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.hive.common.type;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.sql.Timestamp;
 import java.time.ZoneId;
 import java.time.format.DateTimeParseException;
 import java.util.TimeZone;

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/test/org/apache/hive/common/util/TestDateParser.java
----------------------------------------------------------------------
diff --git a/common/src/test/org/apache/hive/common/util/TestDateParser.java b/common/src/test/org/apache/hive/common/util/TestDateParser.java
index 0553b3d..8c3a7a4 100644
--- a/common/src/test/org/apache/hive/common/util/TestDateParser.java
+++ b/common/src/test/org/apache/hive/common/util/TestDateParser.java
@@ -18,13 +18,13 @@
 package org.apache.hive.common.util;
 
 import static org.junit.Assert.*;
-import org.junit.Test;
 
-import java.sql.Date;
+import org.apache.hadoop.hive.common.type.Date;
+import org.junit.Test;
 
 public class TestDateParser {
   DateParser parser = new DateParser();
-  Date date = new Date(0);
+  Date date = new Date();
 
   void checkValidCase(String strValue, Date expected) {
     Date dateValue = parser.parseDate(strValue);
@@ -57,7 +57,6 @@ public class TestDateParser {
     checkValidCase(" 1946-01-01", Date.valueOf("1946-01-01"));
     checkValidCase(" 2001-11-12 01:02:03", Date.valueOf("2001-11-12"));
 
-    // Current date parsing is lenient
     checkValidCase("2001-13-12", Date.valueOf("2002-01-12"));
     checkValidCase("2001-11-31", Date.valueOf("2001-12-01"));
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/common/src/test/org/apache/hive/common/util/TestTimestampParser.java
----------------------------------------------------------------------
diff --git a/common/src/test/org/apache/hive/common/util/TestTimestampParser.java b/common/src/test/org/apache/hive/common/util/TestTimestampParser.java
index c982af6..00a7904 100644
--- a/common/src/test/org/apache/hive/common/util/TestTimestampParser.java
+++ b/common/src/test/org/apache/hive/common/util/TestTimestampParser.java
@@ -18,11 +18,10 @@
 
 package org.apache.hive.common.util;
 
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
-import static org.junit.Assert.*;
+import org.apache.hadoop.hive.common.type.Timestamp;
 import org.junit.Test;
 
 public class TestTimestampParser {
@@ -65,10 +64,11 @@ public class TestTimestampParser {
             Timestamp.valueOf("1945-12-31 23:59:59.1234")),
         new ValidTimestampCase("1970-01-01 00:00:00",
             Timestamp.valueOf("1970-01-01 00:00:00")),
+        new ValidTimestampCase("1945-12-31T23:59:59",
+            Timestamp.valueOf("1945-12-31 23:59:59")),
     };
 
     String[] invalidCases = {
-        "1945-12-31T23:59:59",
         "12345",
     };
 
@@ -111,11 +111,12 @@ public class TestTimestampParser {
             Timestamp.valueOf("2001-01-01 00:00:00")),
         new ValidTimestampCase("1945-12-31 23:59:59.1234",
             Timestamp.valueOf("1945-12-31 23:59:59.1234")),
+        new ValidTimestampCase("1945-12-31T23:59:59.12345",
+            Timestamp.valueOf("1945-12-31 23:59:59.12345"))
     };
 
     String[] invalidCases = {
         "1945-12-31-23:59:59",
-        "1945-12-31T23:59:59.12345", // our pattern didn't specify 5 decimal places
         "12345",
     };
 
@@ -133,19 +134,20 @@ public class TestTimestampParser {
     TimestampParser tp = new TimestampParser(patterns);
 
     ValidTimestampCase[] validCases = {
-        new ValidTimestampCase("0", new Timestamp(0)),
-        new ValidTimestampCase("-1000000", new Timestamp(-1000000)),
-        new ValidTimestampCase("1420509274123", new Timestamp(1420509274123L)),
-        new ValidTimestampCase("1420509274123.456789", new Timestamp(1420509274123L)),
+        new ValidTimestampCase("0", Timestamp.ofEpochMilli(0)),
+        new ValidTimestampCase("-1000000", Timestamp.ofEpochMilli(-1000000)),
+        new ValidTimestampCase("1420509274123", Timestamp.ofEpochMilli(1420509274123L)),
+        new ValidTimestampCase("1420509274123.456789", Timestamp.ofEpochMilli(1420509274123L)),
 
         // Other format pattern should also work
         new ValidTimestampCase("1945-12-31T23:59:59",
             Timestamp.valueOf("1945-12-31 23:59:59")),
+        new ValidTimestampCase("1945-12-31T23:59:59.12345",
+            Timestamp.valueOf("1945-12-31 23:59:59.12345")),
     };
 
     String[] invalidCases = {
         "1945-12-31-23:59:59",
-        "1945-12-31T23:59:59.12345", // our pattern didn't specify 5 decimal places
         "1420509274123-",
     };
 
@@ -167,10 +169,11 @@ public class TestTimestampParser {
             Timestamp.valueOf("1970-01-01 05:06:00")),
         new ValidTimestampCase("05:06:07",
             Timestamp.valueOf("1970-05-06 00:00:07")),
+        new ValidTimestampCase("1945-12-31T23:59:59",
+            Timestamp.valueOf("1945-12-31 23:59:59")),
     };
 
     String[] invalidCases = {
-        "1945-12-31T23:59:59",
         "1945:12:31-",
         "12345",
     };

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/data/files/alltypesorc3xcols
----------------------------------------------------------------------
diff --git a/data/files/alltypesorc3xcols b/data/files/alltypesorc3xcols
index e484873..4d1a98a 100644
Binary files a/data/files/alltypesorc3xcols and b/data/files/alltypesorc3xcols differ

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/data/files/orc_split_elim.orc
----------------------------------------------------------------------
diff --git a/data/files/orc_split_elim.orc b/data/files/orc_split_elim.orc
index cd145d3..ff3557f 100644
Binary files a/data/files/orc_split_elim.orc and b/data/files/orc_split_elim.orc differ

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidSerDe.java
----------------------------------------------------------------------
diff --git a/druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidSerDe.java b/druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidSerDe.java
index a9e7837..f0e12a2 100644
--- a/druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidSerDe.java
+++ b/druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidSerDe.java
@@ -19,6 +19,21 @@ package org.apache.hadoop.hive.druid.serde;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.google.common.base.Function;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.Instant;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.druid.query.Druids;
@@ -27,8 +42,10 @@ import io.druid.query.metadata.metadata.ColumnAnalysis;
 import io.druid.query.metadata.metadata.SegmentAnalysis;
 import io.druid.query.metadata.metadata.SegmentMetadataQuery;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.HiveChar;
 import org.apache.hadoop.hive.common.type.HiveVarchar;
+import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.common.type.TimestampTZ;
 import org.apache.hadoop.hive.conf.Constants;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -42,13 +59,13 @@ import org.apache.hadoop.hive.serde2.SerDeException;
 import org.apache.hadoop.hive.serde2.SerDeSpec;
 import org.apache.hadoop.hive.serde2.SerDeStats;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
-import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
 import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampLocalTZWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampWritable;
+import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.StructField;
@@ -82,23 +99,6 @@ import org.apache.hadoop.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Date;
-import java.sql.Timestamp;
-import java.time.Instant;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.stream.Collectors;
-
 import static org.apache.hadoop.hive.druid.serde.DruidSerDeUtils.TIMESTAMP_FORMAT;
 import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
 
@@ -307,9 +307,9 @@ import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
       final Object res;
       switch (types[i].getPrimitiveCategory()) {
       case TIMESTAMP:
-        res = ((TimestampObjectInspector) fields.get(i).getFieldObjectInspector()).getPrimitiveJavaObject(values.get(i))
-            .getTime();
-        break;
+        res = ((TimestampObjectInspector) fields.get(i).getFieldObjectInspector())
+            .getPrimitiveJavaObject(values.get(i)).toEpochMilli();
+          break;
       case TIMESTAMPLOCALTZ:
         res = ((TimestampLocalTZObjectInspector) fields.get(i).getFieldObjectInspector())
             .getPrimitiveJavaObject(values.get(i)).getZonedDateTime().toInstant().toEpochMilli();
@@ -330,22 +330,24 @@ import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
         res = ((FloatObjectInspector) fields.get(i).getFieldObjectInspector()).get(values.get(i));
         break;
       case DOUBLE:
-        res = ((DoubleObjectInspector) fields.get(i).getFieldObjectInspector()).get(values.get(i));
+        res = ((DoubleObjectInspector) fields.get(i).getFieldObjectInspector())
+            .get(values.get(i));
         break;
       case CHAR:
-        res = ((HiveCharObjectInspector) fields.get(i).getFieldObjectInspector()).getPrimitiveJavaObject(values.get(i))
-            .getValue();
+        res = ((HiveCharObjectInspector) fields.get(i).getFieldObjectInspector())
+            .getPrimitiveJavaObject(values.get(i)).getValue();
         break;
       case VARCHAR:
-        res =
-            ((HiveVarcharObjectInspector) fields.get(i).getFieldObjectInspector()).getPrimitiveJavaObject(values.get(i))
-                .getValue();
+        res = ((HiveVarcharObjectInspector) fields.get(i).getFieldObjectInspector())
+            .getPrimitiveJavaObject(values.get(i)).getValue();
         break;
       case STRING:
-        res = ((StringObjectInspector) fields.get(i).getFieldObjectInspector()).getPrimitiveJavaObject(values.get(i));
+        res = ((StringObjectInspector) fields.get(i).getFieldObjectInspector())
+            .getPrimitiveJavaObject(values.get(i));
         break;
       case BOOLEAN:
-        res = ((BooleanObjectInspector) fields.get(i).getFieldObjectInspector()).get(values.get(i));
+        res = ((BooleanObjectInspector) fields.get(i).getFieldObjectInspector())
+            .get(values.get(i));
         break;
       default:
         throw new SerDeException("Unsupported type: " + types[i].getPrimitiveCategory());
@@ -360,8 +362,7 @@ import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
         fields.get(granularityFieldIndex).getFieldName().equals(Constants.DRUID_TIMESTAMP_GRANULARITY_COL_NAME));
     value.put(Constants.DRUID_TIMESTAMP_GRANULARITY_COL_NAME,
         ((TimestampObjectInspector) fields.get(granularityFieldIndex).getFieldObjectInspector())
-            .getPrimitiveJavaObject(values.get(granularityFieldIndex)).getTime()
-    );
+            .getPrimitiveJavaObject(values.get(granularityFieldIndex)).toEpochMilli());
     if (values.size() == columns.length + 2) {
       // Then partition number if any.
       final int partitionNumPos = granularityFieldIndex + 1;
@@ -395,11 +396,11 @@ import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
       switch (types[i].getPrimitiveCategory()) {
       case TIMESTAMP:
         if (value instanceof Number) {
-          output.add(new TimestampWritable(Timestamp.valueOf(
+          output.add(new TimestampWritableV2(Timestamp.valueOf(
               ZonedDateTime.ofInstant(Instant.ofEpochMilli(((Number) value).longValue()), tsTZTypeInfo.timeZone())
                   .format(DateTimeFormatter.ofPattern(TIMESTAMP_FORMAT)))));
         } else {
-          output.add(new TimestampWritable(Timestamp.valueOf((String) value)));
+          output.add(new TimestampWritableV2(Timestamp.valueOf((String) value)));
         }
 
         break;
@@ -417,12 +418,14 @@ import static org.joda.time.format.ISODateTimeFormat.dateOptionalTimeParser;
             ))));
         break;
       case DATE:
-        final DateWritable dateWritable;
+        final DateWritableV2 dateWritable;
         if (value instanceof Number) {
-          dateWritable = new DateWritable(new Date((((Number) value).longValue())));
+          dateWritable = new DateWritableV2(
+              Date.ofEpochMilli((((Number) value).longValue())));
         } else {
           // it is an extraction fn need to be parsed
-          dateWritable = new DateWritable(new Date(dateOptionalTimeParser().parseDateTime((String) value).getMillis()));
+          dateWritable = new DateWritableV2(
+              Date.ofEpochMilli(dateOptionalTimeParser().parseDateTime((String) value).getMillis()));
         }
         output.add(dateWritable);
         break;

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/druid-handler/src/test/org/apache/hadoop/hive/druid/serde/TestDruidSerDe.java
----------------------------------------------------------------------
diff --git a/druid-handler/src/test/org/apache/hadoop/hive/druid/serde/TestDruidSerDe.java b/druid-handler/src/test/org/apache/hadoop/hive/druid/serde/TestDruidSerDe.java
index 922c1db..060c654 100644
--- a/druid-handler/src/test/org/apache/hadoop/hive/druid/serde/TestDruidSerDe.java
+++ b/druid-handler/src/test/org/apache/hadoop/hive/druid/serde/TestDruidSerDe.java
@@ -27,7 +27,6 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
-import java.sql.Timestamp;
 import java.time.Instant;
 import java.time.ZoneOffset;
 import java.util.ArrayList;
@@ -35,20 +34,11 @@ import java.util.List;
 import java.util.Map.Entry;
 import java.util.Properties;
 
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.google.common.util.concurrent.SettableFuture;
-import com.metamx.http.client.HttpClient;
-import com.metamx.http.client.response.HttpResponseHandler;
-import io.druid.data.input.Row;
-import io.druid.query.Result;
-import io.druid.query.select.SelectResultValue;
-import io.druid.query.timeseries.TimeseriesResultValue;
-import io.druid.query.topn.TopNResultValue;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.type.HiveChar;
-import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.common.type.HiveVarchar;
+import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.common.type.TimestampTZ;
 import org.apache.hadoop.hive.conf.Constants;
 import org.apache.hadoop.hive.druid.DruidStorageHandlerUtils;
@@ -62,11 +52,10 @@ import org.apache.hadoop.hive.serde2.SerDeUtils;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
-import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampLocalTZWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampWritable;
+import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.StructField;
@@ -80,17 +69,25 @@ import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.NullWritable;
 import org.apache.hadoop.io.Text;
-
 import org.junit.Before;
 import org.junit.Test;
 
 import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.SettableFuture;
+import com.metamx.http.client.HttpClient;
+import com.metamx.http.client.response.HttpResponseHandler;
 
+import io.druid.data.input.Row;
 import io.druid.query.Query;
+import io.druid.query.Result;
+import io.druid.query.select.SelectResultValue;
+import io.druid.query.timeseries.TimeseriesResultValue;
+import io.druid.query.topn.TopNResultValue;
 
 /**
  * Basic tests for Druid SerDe. The examples are taken from Druid 0.9.1.1
@@ -778,7 +775,7 @@ public class TestDruidSerDe {
       new IntWritable(1112123),
       new ShortWritable((short) 12),
       new ByteWritable((byte) 0),
-      new TimestampWritable(new Timestamp(1377907200000L)) // granularity
+      new TimestampWritableV2(Timestamp.ofEpochSecond(1377907200L)) // granularity
   };
   private static final DruidWritable DRUID_WRITABLE = new DruidWritable(
       ImmutableMap.<String, Object>builder()

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java
----------------------------------------------------------------------
diff --git a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java
index bc4e146..3805779 100644
--- a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java
+++ b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java
@@ -102,7 +102,7 @@ public class HBaseRowSerializer {
         timestamp = ((LongObjectInspector)inspector).get(value);
       } else {
         PrimitiveObjectInspector primitive = (PrimitiveObjectInspector) inspector;
-        timestamp = PrimitiveObjectInspectorUtils.getTimestamp(value, primitive).getTime();
+        timestamp = PrimitiveObjectInspectorUtils.getTimestamp(value, primitive).toEpochMilli();
       }
     }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/ae008b79/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java
----------------------------------------------------------------------
diff --git a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java
index 05cc30a..8b73bfb 100644
--- a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java
+++ b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java
@@ -35,7 +35,6 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hive.hbase.ColumnMappings.ColumnMapping;
 import org.apache.hadoop.hive.ql.exec.ExprNodeConstantEvaluator;
 import org.apache.hadoop.hive.ql.exec.SerializationUtilities;
-import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.index.IndexSearchCondition;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.plan.TableScanDesc;
@@ -296,7 +295,7 @@ class HiveHBaseInputFormatUtil {
         timestamp = ((LongObjectInspector) inspector).get(value);
       } else {
         PrimitiveObjectInspector primitive = (PrimitiveObjectInspector) inspector;
-        timestamp = PrimitiveObjectInspectorUtils.getTimestamp(value, primitive).getTime();
+        timestamp = PrimitiveObjectInspectorUtils.getTimestamp(value, primitive).toEpochMilli();
       }
     } catch (HiveException e) {
       throw new IOException(e);