From 9df7a8ef43fc35439bc41260d67693a7708236bd Mon Sep 17 00:00:00 2001 From: Beluga Behr Date: Tue, 12 Mar 2019 22:59:15 -0400 Subject: [PATCH] SQOOP-3433: Improve Error Message if No User Mapping Found --- .../org/apache/sqoop/hive/TableDefWriter.java | 23 +++++++++---------- .../hive/TestHiveServer2ParquetImport.java | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/java/org/apache/sqoop/hive/TableDefWriter.java b/src/java/org/apache/sqoop/hive/TableDefWriter.java index f296897f..f17d9c68 100644 --- a/src/java/org/apache/sqoop/hive/TableDefWriter.java +++ b/src/java/org/apache/sqoop/hive/TableDefWriter.java @@ -21,14 +21,17 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Properties; +import java.util.Set; import org.apache.avro.Schema; import org.apache.commons.lang.StringUtils; @@ -151,19 +154,15 @@ public String getCreateTableStmt() throws IOException { sb.append(outputTableName).append("` ( "); // Check that all explicitly mapped columns are present in result set - for(Object column : userMapping.keySet()) { - boolean found = false; - for(String c : colNames) { - if (c.equals(column)) { - found = true; - break; - } - } + final Set userMappingKeys = new LinkedHashSet<>(userMapping.keySet()); + final List colNamesSet = Arrays.asList(colNames); - if (!found) { - throw new IllegalArgumentException("No column by the name " + column - + "found while importing data"); - } + userMappingKeys.removeAll(colNamesSet); + + if (!userMappingKeys.isEmpty()) { + throw new IllegalArgumentException( + "No user mappings found for columns " + userMappingKeys + + " while importing data"); } boolean first = true; diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java index 8cfd776d..55375c13 100644 --- a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java +++ b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java @@ -235,7 +235,7 @@ public void testHiveImportAsParquetWithMapColumnHiveAndOriginalColumnNameFails() .build(); expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("No column by the name C2#INTEGERfound while importing data"); + expectedException.expectMessage("No user mappings found for columns [C2#INTEGER] while importing data"); runImportThrowingException(args); }