SQOOP-3010: Sqoop should not allow --as-parquetfile with hcatalog jobs or when hive...
authorVenkatesan Ranganathan <venkat@hortonworks.com>
Mon, 26 Sep 2016 12:34:13 +0000 (05:34 -0700)
committerVenkatesan Ranganathan <venkat@hortonworks.com>
Mon, 26 Sep 2016 12:34:13 +0000 (05:34 -0700)
  (Sowmya Ramesh via Venkat Ranganathan)

src/java/org/apache/sqoop/tool/BaseSqoopTool.java
src/test/com/cloudera/sqoop/hive/TestHiveImport.java
src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java

index fecdf43..b71bc5e 100644 (file)
@@ -1421,6 +1421,14 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool {
         + "importing into SequenceFile format.");
     }
 
         + "importing into SequenceFile format.");
     }
 
+    // Hive import and create hive table not compatible for ParquetFile format
+    if (options.doHiveImport()
+        && options.doFailIfHiveTableExists()
+        && options.getFileLayout() == SqoopOptions.FileLayout.ParquetFile) {
+      throw new InvalidOptionsException("Hive import and create hive table is not compatible with "
+        + "importing into ParquetFile format.");
+      }
+
     if (options.doHiveImport()
         && options.isAppendMode()
         && !options.getIncrementalMode().equals(IncrementalMode.AppendRows)) {
     if (options.doHiveImport()
         && options.isAppendMode()
         && !options.getIncrementalMode().equals(IncrementalMode.AppendRows)) {
@@ -1598,6 +1606,12 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool {
         + " option." + HELP_STR);
     }
 
         + " option." + HELP_STR);
     }
 
+    if (options.getFileLayout() == SqoopOptions.FileLayout.ParquetFile) {
+      throw new InvalidOptionsException("HCatalog job  is not compatible with "
+        + "SequenceFile format option " + FMT_PARQUETFILE_ARG
+        + " option." + HELP_STR);
+    }
+
     if (options.getHCatalogPartitionKeys() != null
         && options.getHCatalogPartitionValues() == null) {
       throw new InvalidOptionsException("Either both --hcatalog-partition-keys"
     if (options.getHCatalogPartitionKeys() != null
         && options.getHCatalogPartitionValues() == null) {
       throw new InvalidOptionsException("Either both --hcatalog-partition-keys"
index b626964..26d087b 100644 (file)
@@ -402,6 +402,27 @@ public class TestHiveImport extends ImportJobTestCase {
         {"test2", 4242, "somestring2"}, {"test", 42, "somestring"}});
   }
 
         {"test2", 4242, "somestring2"}, {"test", 42, "somestring"}});
   }
 
+  /**
+   * Test hive create and --as-parquetfile options validation.
+   */
+  @Test
+  public void testCreateHiveImportAsParquet() throws ParseException {
+    final String TABLE_NAME = "CREATE_HIVE_IMPORT_AS_PARQUET";
+    setCurTableName(TABLE_NAME);
+    setNumCols(3);
+    String [] extraArgs = {"--as-parquetfile", "--create-hive-table"};
+    ImportTool tool = new ImportTool();
+
+    try {
+      tool.validateOptions(tool.parseArguments(getArgv(false, extraArgs), null,
+          null, true));
+      fail("Expected InvalidOptionsException");
+    } catch (InvalidOptionsException ex) {
+      /* success */
+    }
+  }
+
+
   /** Test that dates are coerced properly to strings. */
   @Test
   public void testDate() throws IOException {
   /** Test that dates are coerced properly to strings. */
   @Test
   public void testDate() throws IOException {
index 5cd4c26..54b4552 100644 (file)
@@ -164,6 +164,24 @@ public class TestHCatalogBasic extends TestCase {
     }
   }
 
     }
   }
 
+  public void testHCatExportWithParquetFile() throws Exception {
+    String[] args = {
+      "--connect",
+      "jdbc:db:url",
+      "--table",
+      "dbtable",
+      "--hcatalog-table",
+      "table",
+      "--as-parquetfile",
+    };
+    try {
+      SqoopOptions opts = parseExportArgs(args);
+      exportTool.validateOptions(opts);
+      fail("Expected InvalidOptionsException");
+    } catch (SqoopOptions.InvalidOptionsException ioe) {
+      // expected.
+    }
+  }
 
   public void testHCatImportWithSequenceFile() throws Exception {
     String[] args = {
 
   public void testHCatImportWithSequenceFile() throws Exception {
     String[] args = {
@@ -184,6 +202,28 @@ public class TestHCatalogBasic extends TestCase {
     }
   }
 
     }
   }
 
+  public void testHCatImportWithParquetFile() throws Exception {
+    String[] args = {
+      "--hcatalog-table",
+      "table",
+      "--create-hcatalog-table",
+      "--connect",
+      "jdbc:db:url",
+      "--table",
+      "dbtable",
+      "--hcatalog-table",
+      "table",
+      "--as-parquetfile",
+    };
+    try {
+      SqoopOptions opts = parseImportArgs(args);
+      importTool.validateOptions(opts);
+      fail("Expected InvalidOptionsException");
+    } catch (SqoopOptions.InvalidOptionsException ioe) {
+      // expected.
+    }
+  }
+
   public void testHCatImportWithAvroFile() throws Exception {
     String[] args = {
       "--connect",
   public void testHCatImportWithAvroFile() throws Exception {
     String[] args = {
       "--connect",