HIVE-16291: Hive fails when unions a parquet table with itself (Yibing Shi, reviewed by Ashutosh Chauhan & Aihua Xu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a5f94c07 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a5f94c07 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a5f94c07 Branch: refs/heads/master Commit: a5f94c0710ac6ad04305e2cc320bb9eede301815 Parents: f8404d8 Author: Aihua Xu <aihu...@apache.org> Authored: Fri Apr 7 09:57:25 2017 -0400 Committer: Aihua Xu <aihu...@apache.org> Committed: Fri Apr 7 09:57:25 2017 -0400 ---------------------------------------------------------------------- .../hadoop/hive/serde2/ColumnProjectionUtils.java | 6 ++---- .../hadoop/hive/serde2/TestColumnProjectionUtils.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/a5f94c07/serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java ---------------------------------------------------------------------- diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java index 1354680..9844166 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.util.StringUtils; +import org.apache.hive.common.util.HiveStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -115,10 +116,7 @@ public final class ColumnProjectionUtils { public static void appendReadColumns(Configuration conf, List<Integer> ids) { String id = toReadColumnIDString(ids); String old = conf.get(READ_COLUMN_IDS_CONF_STR, null); - String newConfStr = id; - if (old != null && !old.isEmpty()) { - newConfStr = newConfStr + StringUtils.COMMA_STR + old; - } + String newConfStr = HiveStringUtils.joinIgnoringEmpty(new String[] {id, old}, StringUtils.COMMA); setReadColumnIDConf(conf, newConfStr); // Set READ_ALL_COLUMNS to false conf.setBoolean(READ_ALL_COLUMNS, false); http://git-wip-us.apache.org/repos/asf/hive/blob/a5f94c07/serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java ---------------------------------------------------------------------- diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java b/serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java index 2b81b54..fbd9b07 100644 --- a/serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java +++ b/serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java @@ -85,6 +85,20 @@ public class TestColumnProjectionUtils { } @Test + public void testMultipleIdsWithEmpty() { + List<Integer> ids1 = Arrays.asList(1, 2); + List<Integer> ids2 = new ArrayList<Integer>(); + List<Integer> ids3 = Arrays.asList(2, 3); + + ColumnProjectionUtils.appendReadColumns(conf, ids1); + ColumnProjectionUtils.appendReadColumns(conf, ids2); + ColumnProjectionUtils.appendReadColumns(conf, ids3); + + List<Integer> actual = ColumnProjectionUtils.getReadColumnIDs(conf); + assertEquals(Arrays.asList(2, 3, 1), actual); + } + + @Test public void testDeprecatedMethods() { List<Integer> columnIds = new ArrayList<Integer>(); List<Integer> actual;