*History*

*Hive 1.2* -

VM time zone set to Asia/Bangkok

*Query* - SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('1800-01-01 00:00:00
UTC','yyyy-MM-dd HH:mm:ss z'));

*Result* - 1800-01-01 07:00:00

*Implementation details* -

SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Long unixtime = formatter.parse(textval).getTime() / 1000;
Date date = new Date(unixtime * 1000L);

https://docs.oracle.com/javase/8/docs/api/java/util/Date.html . In official
documentation they have mentioned that "Unfortunately, the API for these
functions was not amenable to internationalization and The corresponding
methods in Date are deprecated" . Due to that this is producing wrong result

*latest hive* -

set hive.local.time.zone=Asia/Bangkok;

*Query* - SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('1800-01-01 00:00:00
UTC','yyyy-MM-dd HH:mm:ss z'));

*Result* - 1800-01-01 06:42:04

*Implementation details* -

DateTimeFormatter dtformatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(pattern)
.toFormatter();

ZonedDateTime zonedDateTime =
ZonedDateTime.parse(textval,dtformatter).withZoneSameInstant(ZoneId.of(timezone));
Long dttime = zonedDateTime.toInstant().getEpochSecond();


*Problem*-

Now *SimpleDateFormat* has been replaced with *DateTimeFormatter* which is
not backward compatible. Causing issues at times for migration to the new
version. Because the older data written using Hive 1.x or 2.x is not
compatible with *DateTimeFormatter*.


*Solution -*

Introduce an config "hive.legacy.timeParserPolicy" with following values -
*1. EXCEPTION* - compare value of
both SimpleDateFormat & DateTimeFormatter raise exception if doesn't match
*2. LEGACY *- use SimpleDateFormat
*3. CORRECTED *- use DateTimeFormatter

This will help hive user in the following manner -
1. Migrate to new version using *LEGACY*
2. Find values which are not compatible with the new version - *EXCEPTION*
3. Use latest date apis - *CORRECTED*

Note: apache spark also face the same issue
https://issues.apache.org/jira/browse/SPARK-30668


Hive jira - https://issues.apache.org/jira/browse/HIVE-25576


Thanks

Ashish Sharma

Reply via email to