[ https://issues.apache.org/jira/browse/HIVE-27742?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on HIVE-27742 started by Zoltán Rátkai. -------------------------------------------- > LOCAL timezone value is treated as UTC instead of system's timezone which > causes data consistency issues > -------------------------------------------------------------------------------------------------------- > > Key: HIVE-27742 > URL: https://issues.apache.org/jira/browse/HIVE-27742 > Project: Hive > Issue Type: Sub-task > Affects Versions: 4.0.0-beta-1 > Reporter: Janos Kovacs > Assignee: Zoltán Rátkai > Priority: Major > > The Hive configuration states: > {noformat} > HIVE_LOCAL_TIME_ZONE("hive.local.time.zone", "LOCAL", > "Sets the time-zone for displaying and interpreting time stamps. If > this property value is set to\n" + > "LOCAL, it is not specified, or it is not a correct time-zone, the > system default time-zone will be\n " + > "used instead. Time-zone IDs can be specified as region-based zone > IDs (based on IANA time-zone data),\n" + > "abbreviated zone IDs, or offset IDs."), > {noformat} > But seems like in hive4 (-beta) it always treated as UTC - as any other > invalid timezone value (see HIVE-27741). > Repro code: > {noformat} > docker rm -f hive4 > export HIVE_VERSION=4.0.0-beta-2-SNAPSHOT > export HS2_ENV_TZ="Europe/Budapest" > export HS2_USER_TZ=${HS2_ENV_TZ} > export HIVE_LOCAL_TZ=${HS2_ENV_TZ} > export HS2_OPTS="-Duser.timezone=$HS2_USER_TZ > -Dhive.local.time.zone=$HIVE_LOCAL_TZ" > export HS2_OPTS="$HS2_OPTS > -Dhive.server2.tez.initialize.default.sessions=false" > docker run -d -p 10000:10000 -p 10001:10001 -p 10002:10002 --env > TZ=${HS2_ENV_TZ} --env SERVICE_OPTS=${HS2_OPTS} --env > SERVICE_NAME=hiveserver2 --name hive4 apache/hive:${HIVE_VERSION} > docker exec -it hive4 beeline -u 'jdbc:hive2://localhost:10000/' -e " > SELECT '\${env:TZ}' as \`env:TZ\`, > '\${system:user.timezone}' as \`system:user.timezone\`, > '\${hiveconf:hive.local.time.zone}' as > \`hiveconf:hive.local.time.zone\`; > DROP TABLE IF EXISTS timestamptest; > CREATE TABLE timestamptest ( > ts timestamp, > tz timestamp with local time zone > ) STORED AS TEXTFILE; > INSERT INTO timestamptest select TIMESTAMP'2016-01-03 > 12:26:34',TIMESTAMPLOCALTZ'2016-01-03 12:26:34 America/Los_Angeles'; > SET hive.query.results.cache.enabled=false; > SET hive.local.time.zone=LOCAL; > SELECT '\${env:TZ}' as \`env:TZ\`, > '\${system:user.timezone}' as \`system:user.timezone\`, > '\${hiveconf:hive.local.time.zone}' as > \`hiveconf:hive.local.time.zone\`; > SELECT > 'LOCAL' as > tzset, > tz as orig, > to_utc_timestamp(tz, 'LOCAL') as > utc_local, > to_utc_timestamp(tz, 'Europe/Budapest') as > utc_tz, > from_utc_timestamp(to_utc_timestamp(tz,'LOCAL'),'Europe/Budapest') as to_bp > FROM timestamptest; > SET hive.local.time.zone=Europe/Budapest; > SELECT '\${env:TZ}' as \`env:TZ\`, > '\${system:user.timezone}' as \`system:user.timezone\`, > '\${hiveconf:hive.local.time.zone}' as > \`hiveconf:hive.local.time.zone\`; > SELECT > 'Europe/Budapest' > as tzset, > tz > as orig, > to_utc_timestamp(tz, 'LOCAL') > as utc_local, > to_utc_timestamp(tz, 'Europe/Budapest') > as utc_tz, > > from_utc_timestamp(to_utc_timestamp(tz,'Europe/Budapest'),'Europe/Budapest') > as to_bp > FROM timestamptest; > " > {noformat} > The results are: > {noformat} > +------------------+-----------------------+--------------------------------+ > | env:tz | system:user.timezone | hiveconf:hive.local.time.zone | > +------------------+-----------------------+--------------------------------+ > | Europe/Budapest | Europe/Budapest | LOCAL | > +------------------+-----------------------+--------------------------------+ > +--------+----------------------------------------+------------------------+------------------------+------------------------+ > | tzset | orig | utc_local | > utc_tz | to_bp | > +--------+----------------------------------------+------------------------+------------------------+------------------------+ > | LOCAL | 2016-01-03 21:26:34.0 Europe/Budapest | 2016-01-03 21:26:34.0 | > 2016-01-03 20:26:34.0 | 2016-01-03 22:26:34.0 | > +--------+----------------------------------------+------------------------+------------------------+------------------------+ > +------------------+-----------------------+--------------------------------+ > | env:tz | system:user.timezone | hiveconf:hive.local.time.zone | > +------------------+-----------------------+--------------------------------+ > | Europe/Budapest | Europe/Budapest | Europe/Budapest | > +------------------+-----------------------+--------------------------------+ > +------------------+----------------------------------------+------------------------+------------------------+------------------------+ > | tzset | orig | utc_local > | utc_tz | to_bp | > +------------------+----------------------------------------+------------------------+------------------------+------------------------+ > | Europe/Budapest | 2016-01-03 21:26:34.0 Europe/Budapest | 2016-01-03 > 21:26:34.0 | 2016-01-03 20:26:34.0 | 2016-01-03 21:26:34.0 | > +------------------+----------------------------------------+------------------------+------------------------+------------------------+ > {noformat} > The *to_bp* values show a 1h offset because LOCAL treated as UTC instead of > system's timezone and converting from it offsets the calculated value. -- This message was sent by Atlassian Jira (v8.20.10#820010)