From 7d5a0a86e36932726abee49aa4c29ea9cbd576e9 Mon Sep 17 00:00:00 2001 From: Jinfeng Ni Date: Thu, 18 Feb 2016 15:38:42 -0800 Subject: [PATCH] DRILL-4392: Fix CTAS partition to remove one unnecessary internal field in generated parquet files. --- .../templates/EventBasedRecordWriter.java | 2 +- .../store/parquet/ParquetRecordWriter.java | 2 +- .../org/apache/drill/exec/sql/TestCTAS.java | 25 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/exec/java-exec/src/main/codegen/templates/EventBasedRecordWriter.java b/exec/java-exec/src/main/codegen/templates/EventBasedRecordWriter.java index c7676cbb6a6..584f4b6028d 100644 --- a/exec/java-exec/src/main/codegen/templates/EventBasedRecordWriter.java +++ b/exec/java-exec/src/main/codegen/templates/EventBasedRecordWriter.java @@ -79,7 +79,7 @@ private void initFieldWriters() throws IOException { try { int fieldId = 0; for (VectorWrapper w : batch) { - if (w.getField().getPath().equals(SchemaPath.getSimplePath(WriterPrel.PARTITION_COMPARATOR_FIELD))) { + if (w.getField().getPath().equalsIgnoreCase(WriterPrel.PARTITION_COMPARATOR_FIELD)) { continue; } FieldReader reader = w.getValueVector().getReader(); diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetRecordWriter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetRecordWriter.java index 8f4f5fdb1dd..3f2defd3be7 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetRecordWriter.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetRecordWriter.java @@ -181,7 +181,7 @@ public void updateSchema(VectorAccessible batch) throws IOException { private void newSchema() throws IOException { List types = Lists.newArrayList(); for (MaterializedField field : batchSchema) { - if (field.getPath().equals(SchemaPath.getSimplePath(WriterPrel.PARTITION_COMPARATOR_FIELD))) { + if (field.getPath().equalsIgnoreCase(WriterPrel.PARTITION_COMPARATOR_FIELD)) { continue; } types.add(getType(field)); diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTAS.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTAS.java index 33288e367cd..5294709c6da 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTAS.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTAS.java @@ -213,6 +213,31 @@ public void ctasWithQueryOrderby() throws Exception { } } + @Test // DRILL-4392 + public void ctasWithPartition() throws Exception { + final String newTblName = "nation_ctas"; + + try { + final String ctasQuery = String.format("CREATE TABLE %s.%s " + + "partition by (n_regionkey) AS SELECT n_nationkey, n_regionkey from cp.`tpch/nation.parquet` order by n_nationkey limit 1", + TEMP_SCHEMA, newTblName); + + test(ctasQuery); + + final String selectFromCreatedTable = String.format(" select * from %s.%s", TEMP_SCHEMA, newTblName); + final String baselineQuery = "select n_nationkey, n_regionkey from cp.`tpch/nation.parquet` order by n_nationkey limit 1"; + + testBuilder() + .sqlQuery(selectFromCreatedTable) + .ordered() + .sqlBaselineQuery(baselineQuery) + .build() + .run(); + } finally { + FileUtils.deleteQuietly(new File(getDfsTestTmpSchemaLocation(), newTblName)); + } + } + private static void ctasErrorTestHelper(final String ctasSql, final String expErrorMsg) throws Exception { final String createTableSql = String.format(ctasSql, TEMP_SCHEMA, "testTableName"); errorMsgTestHelper(createTableSql, expErrorMsg);