PIG-5431: Date datatype is different between Hive 1.x and Hive 3.x (rohini)
git-svn-id: https://svn.apache.org/repos/asf/pig/trunk@1906696 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index a85b7fd..483bc95 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -116,6 +116,8 @@
BUG FIXES
+PIG-5431: Date datatype is different between Hive 1.x and Hive 3.x (rohini)
+
PIG-5433: Fix test failures with TestHBaseStorage and htrace dependency (rohini)
PIG-5430: TestTezGraceParallelism failing due to tez log change (knoguchi)
diff --git a/shims/src/hive1/org/apache/pig/hive/HiveShims.java b/shims/src/hive1/org/apache/pig/hive/HiveShims.java
index b606821..34bdb7e 100644
--- a/shims/src/hive1/org/apache/pig/hive/HiveShims.java
+++ b/shims/src/hive1/org/apache/pig/hive/HiveShims.java
@@ -19,6 +19,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.sql.Date;
import java.sql.Timestamp;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -143,6 +144,17 @@
return new SimpleGenericUDAFParameterInfo(arguments, distinct, allColumns);
}
+ public static class DateShim {
+
+ public static Date cast(Object ts) {
+ return (Date) ts;
+ }
+
+ public static long millisFromDate(Object ts) {
+ return cast(ts).getTime();
+ }
+ }
+
public static class TimestampShim {
public static Timestamp cast(Object ts) {
diff --git a/shims/src/hive3/org/apache/pig/hive/HiveShims.java b/shims/src/hive3/org/apache/pig/hive/HiveShims.java
index 32456c5..063fbcd 100644
--- a/shims/src/hive3/org/apache/pig/hive/HiveShims.java
+++ b/shims/src/hive3/org/apache/pig/hive/HiveShims.java
@@ -20,6 +20,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import org.apache.hadoop.hive.common.type.Date;
import org.apache.hadoop.hive.common.type.HiveDecimal;
import org.apache.hadoop.hive.common.type.Timestamp;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -165,6 +166,17 @@
return new SimpleGenericUDAFParameterInfo(arguments, false, distinct, allColumns);
}
+ public static class DateShim {
+
+ public static Date cast(Object ts) {
+ return (Date) ts;
+ }
+
+ public static long millisFromDate(Object ts) {
+ return cast(ts).toEpochMilli();
+ }
+ }
+
public static class TimestampShim {
public static Timestamp cast(Object ts) {
@@ -191,4 +203,4 @@
}
}
-}
\ No newline at end of file
+}
diff --git a/src/org/apache/pig/impl/util/hive/HiveUtils.java b/src/org/apache/pig/impl/util/hive/HiveUtils.java
index 5fc0f40..a725a03 100644
--- a/src/org/apache/pig/impl/util/hive/HiveUtils.java
+++ b/src/org/apache/pig/impl/util/hive/HiveUtils.java
@@ -184,8 +184,7 @@
result = new DateTime(HiveShims.TimestampShim.millisFromTimestamp(poi.getPrimitiveJavaObject(obj)));
break;
case DATE:
- java.sql.Date origDate = (java.sql.Date)poi.getPrimitiveJavaObject(obj);
- result = new DateTime(origDate.getTime());
+ result = new DateTime(HiveShims.DateShim.millisFromDate(poi.getPrimitiveJavaObject(obj)));
break;
case DECIMAL:
org.apache.hadoop.hive.common.type.HiveDecimal origDecimal =
diff --git a/test/org/apache/pig/builtin/TestOrcStorage.java b/test/org/apache/pig/builtin/TestOrcStorage.java
index b8f6bd5..5472e41 100644
--- a/test/org/apache/pig/builtin/TestOrcStorage.java
+++ b/test/org/apache/pig/builtin/TestOrcStorage.java
@@ -183,6 +183,20 @@
}
assertEquals(count, 10000);
}
+
+ @Test
+ public void testDate() throws Exception {
+ pigServer.registerQuery("A = load '" + basedir + "datetype.orc'" + " using OrcStorage();" );
+ Schema schema = pigServer.dumpSchema("A");
+ assertEquals(schema.size(), 1);
+ assertEquals(schema.getField(0).type, DataType.DATETIME);
+ Iterator<Tuple> iter = pigServer.openIterator("A");
+ Tuple t = iter.next();
+ assertTrue(t.get(0) instanceof DateTime);
+ assertEquals(t.toString(), "(2022-07-07T00:00:00.000Z)");
+ assertEquals(iter.next().toString(), "(2022-09-09T00:00:00.000Z)");
+ assertFalse(iter.hasNext());
+ }
@Test
// See PIG-4218
diff --git a/test/org/apache/pig/builtin/orc/datetype.orc b/test/org/apache/pig/builtin/orc/datetype.orc
new file mode 100644
index 0000000..391b27c
--- /dev/null
+++ b/test/org/apache/pig/builtin/orc/datetype.orc
Binary files differ