[
https://issues.apache.org/jira/browse/HIVE-28381?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kokila N updated HIVE-28381:
----------------------------
Description:
*RCA:*
Two DATETIME format changes in JDK11:{*}D{*} represents DAY_OF_YEAR as in it
counts days from 1-366 which requires DDD in format (dd represents DAY_OF_MONTH
-> counts 1-31).
*JDK8:* If given format is DD(width=2) but the day is actually with 3
width(above 100) in the input value then this will trigger error that width
exceeds 2 and returns null.
*JDK11:* If given format is DD or DDD then max width is set to 3(hardcoded) so
it considers days with 2 and 3 digits as valid and returns the value which
corresponds to the day in the year.
*Commit:*
[https://github.com/openjdk/jdk11u-dev/commit/4900a8320308f0b55344644a599c4d86afec72d2]
*Solution:*
Changing the value in test cases should be fine for these tests in
*TestGenericUDFDateFormatEvaluate.java and
TestGenericUDFFromUnixTimeEvaluate.java* as the JDK behaviour has changed.
was:
*RCA:*
Two DATETIME format changes in JDK11:{*}D{*} represents DAY_OF_YEAR as in it
counts days from 1-366 which requires DDD in format (dd represents DAY_OF_MONTH
-> counts 1-31).
*JDK8:* If given format is DD(width=2) but the day is actually with 3
width(above 100) in the input value then this will trigger error that width
exceeds 2 and returns null.
*JDK11:* If given format is DD or DDD then max width is set to 3(hardcoded) so
it considers days with 2 and 3 digits as valid and returns the value which
corresponds to the day in the year.
*Commit:*
[https://github.com/openjdk/jdk11u-dev/commit/4900a8320308f0b55344644a599c4d86afec72d2]
*A* represents MILLI_OF_DAY.
*JDK8:* Depending on the number of A's given in format, max width is set and
only those number of digits are considered and if the converted value exceeds
max width , it will throw error and return null.
*JDK11:* A's max width is hardcoded to 19, so an error is thrown only if it
exceeds 19 digits.
*Commit:*
[https://github.com/openjdk/jdk11u-dev/commit/386a77fd91612badbb14edc05fe4142415192b46]
*Solution:*
Changing the value in test cases should be fine for these tests in
*TestGenericUDFDateFormatEvaluate.java and
TestGenericUDFFromUnixTimeEvaluate.java* as the JDK behaviour has changed.
> JDK17: Change in behaviour of DAY_OF_YEAR in timestamp
> -------------------------------------------------------
>
> Key: HIVE-28381
> URL: https://issues.apache.org/jira/browse/HIVE-28381
> Project: Hive
> Issue Type: Sub-task
> Reporter: Akshat Mathur
> Assignee: Kokila N
> Priority: Major
>
> *RCA:*
> Two DATETIME format changes in JDK11:{*}D{*} represents DAY_OF_YEAR as in it
> counts days from 1-366 which requires DDD in format (dd represents
> DAY_OF_MONTH -> counts 1-31).
> *JDK8:* If given format is DD(width=2) but the day is actually with 3
> width(above 100) in the input value then this will trigger error that width
> exceeds 2 and returns null.
> *JDK11:* If given format is DD or DDD then max width is set to 3(hardcoded)
> so it considers days with 2 and 3 digits as valid and returns the value which
> corresponds to the day in the year.
> *Commit:*
> [https://github.com/openjdk/jdk11u-dev/commit/4900a8320308f0b55344644a599c4d86afec72d2]
> *Solution:*
> Changing the value in test cases should be fine for these tests in
> *TestGenericUDFDateFormatEvaluate.java and
> TestGenericUDFFromUnixTimeEvaluate.java* as the JDK behaviour has changed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)