You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2018/06/28 15:45:18 UTC
[34/34] 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
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);