diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPageSourceFactory.java b/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPageSourceFactory.java index 1dd656a76b8e7..f12e47e97774c 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPageSourceFactory.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPageSourceFactory.java @@ -373,7 +373,7 @@ private static boolean checkSchemaMatch(org.apache.parquet.schema.Type parquetTy PrimitiveTypeName parquetTypeName = parquetType.asPrimitiveType().getPrimitiveTypeName(); switch (parquetTypeName) { case INT64: - return prestoType.equals(BIGINT) || prestoType.equals(DECIMAL); + return prestoType.equals(BIGINT) || prestoType.equals(DECIMAL) || prestoType.equals(TIMESTAMP); case INT32: return prestoType.equals(INTEGER) || prestoType.equals(SMALLINT) || prestoType.equals(DATE) || prestoType.equals(DECIMAL) || prestoType.equals(TINYINT); case BOOLEAN: diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveFileFormats.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveFileFormats.java index 03221aee1dd11..53010865b6703 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveFileFormats.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveFileFormats.java @@ -105,6 +105,7 @@ import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory.javaIntObjectInspector; import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory.javaLongObjectInspector; import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory.javaStringObjectInspector; +import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory.javaTimestampObjectInspector; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; @@ -544,6 +545,7 @@ public void testSchemaMismatch() TestColumn stringColumn = new TestColumn("column_name", javaStringObjectInspector, "test", utf8Slice("test")); TestColumn intColumn = new TestColumn("column_name", javaIntObjectInspector, 3, 3); TestColumn longColumn = new TestColumn("column_name", javaLongObjectInspector, 4L, 4L); + TestColumn timestampColumn = new TestColumn("column_name", javaTimestampObjectInspector, 4L, 4L); TestColumn mapLongColumn = new TestColumn("column_name", getStandardMapObjectInspector(javaLongObjectInspector, javaLongObjectInspector), ImmutableMap.of(4L, 4L), @@ -578,6 +580,13 @@ public void testSchemaMismatch() HiveErrorCode expectedErrorCode = HIVE_PARTITION_SCHEMA_MISMATCH; String expectedMessageFloatDouble = "The column column_name is declared as type double, but the Parquet file declares the column as type FLOAT"; + // Make sure INT64 is still readable as Timestamp see https://github.com/prestodb/presto/issues/13855 + assertThatFileFormat(PARQUET) + .withWriteColumns(ImmutableList.of(longColumn)) + .withReadColumns(ImmutableList.of(timestampColumn)) + .withSession(parquetPageSourceSession) + .isReadableByPageSource(new ParquetPageSourceFactory(TYPE_MANAGER, HDFS_ENVIRONMENT, STATS, new HadoopFileOpener())); + assertThatFileFormat(PARQUET) .withWriteColumns(ImmutableList.of(floatColumn)) .withReadColumns(ImmutableList.of(doubleColumn))