You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Eli Acherkan (JIRA)" <ji...@apache.org> on 2014/09/15 17:04:34 UTC

[jira] [Commented] (HIVE-8102) Partitions of type 'date' behave incorrectly with daylight saving time.

    [ https://issues.apache.org/jira/browse/HIVE-8102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14133985#comment-14133985 ] 

Eli Acherkan commented on HIVE-8102:
------------------------------------

The following test fails when running in Asia/Jerusalem timezone:
	Date originalDate = new Date(114, 2, 28); // March 28th 2014 - DST begins on this day at 02:00.
	DateWritable dateWritable = new DateWritable(originalDate);
	assertEquals(originalDate, dateWritable.get()); // Assertion fails because dateWritable.get() returns 2014-03-27 23:00:00 IST.

In order to be able to run this unit test in any timezone, we explicitly set the timezone and run it in a separate thread, so that the thread local member DataWritable.LOCAL_TIMEZONE is initialized with the correct one:
	public void testDaylightSavingsTime() throws InterruptedException, ExecutionException {
		TimeZone previousDefault = TimeZone.getDefault();
		TimeZone.setDefault(TimeZone.getTimeZone("Asia/Jerusalem"));
		ExecutorService threadPool = Executors.newFixedThreadPool(1);
		try {
			Future<Boolean> future = threadPool.submit(new Callable<Boolean>() {

				@Override
				public Boolean call() throws Exception {
					Date originalDate = new Date(114, 2, 28); // March 28th 2014 - DST begins on this day at 02:00.
					DateWritable dateWritable = new DateWritable(originalDate);
					return originalDate.equals(dateWritable.get());
				}
			});
			assertTrue(future.get());
		} finally {
			threadPool.shutdown();
			TimeZone.setDefault(previousDefault);
		}
	}


> Partitions of type 'date' behave incorrectly with daylight saving time.
> -----------------------------------------------------------------------
>
>                 Key: HIVE-8102
>                 URL: https://issues.apache.org/jira/browse/HIVE-8102
>             Project: Hive
>          Issue Type: Bug
>          Components: Database/Schema, Serializers/Deserializers
>    Affects Versions: 0.13.0
>            Reporter: Eli Acherkan
>
> On 2AM on March 28th 2014, Israel went from standard time (GMT+2) to daylight saving time (GMT+3).
> The server's timezone is Asia/Jerusalem. When creating a partition whose key is 2014-03-28, Hive creates a partition for 2013-03-27 instead:
> hive (default)> create table test (a int) partitioned by (`b_prt` date);
> OK
> Time taken: 0.092 seconds
> hive (default)> alter table test add partition (b_prt='2014-03-28');
> OK
> Time taken: 0.187 seconds
> hive (default)> show partitions test;                                   
> OK
> partition
> b_prt=2014-03-27
> Time taken: 0.134 seconds, Fetched: 1 row(s)
> It seems that the root cause is the behavior of DateWritable.daysToMillis/dateToDays.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)