SQOOP-2986: Add validation check for --hive-import and --incremental lastmodified
(Szabolcs Vasas via Attila Szabo)
diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index b71bc5e..13a9697 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -230,6 +230,9 @@
public static final String AUTORESET_TO_ONE_MAPPER = "autoreset-to-one-mapper";
+ static final String HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED = "--incremental lastmodified option for hive imports is not "
+ + "supported. Please remove the parameter --incremental lastmodified.";
+
public BaseSqoopTool() {
}
@@ -1430,6 +1433,11 @@
}
if (options.doHiveImport()
+ && options.getIncrementalMode().equals(IncrementalMode.DateLastModified)) {
+ throw new InvalidOptionsException(HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+ }
+
+ if (options.doHiveImport()
&& options.isAppendMode()
&& !options.getIncrementalMode().equals(IncrementalMode.AppendRows)) {
throw new InvalidOptionsException("Append mode for hive imports is not "
diff --git a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
new file mode 100644
index 0000000..503a863
--- /dev/null
+++ b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
@@ -0,0 +1,92 @@
+package org.apache.sqoop.tool;
+
+import com.cloudera.sqoop.SqoopOptions;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class ImportToolValidateOptionsTest {
+
+ private static final String TABLE_NAME = "testTableName";
+ private static final String CONNECT_STRING = "testConnectString";
+ private static final String CHECK_COLUMN_NAME = "checkColumnName";
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private ImportTool importTool;
+
+ @Before
+ public void setup() {
+ importTool = new ImportTool();
+ importTool.extraArguments = new String[0];
+ }
+
+ @Test
+ public void testValidationFailsWithHiveImportAndIncrementalLastmodified() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHiveImport(true);
+ options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+ options.setIncrementalMode(SqoopOptions.IncrementalMode.DateLastModified);
+
+ thrown.expect(SqoopOptions.InvalidOptionsException.class);
+ thrown.expectMessage(BaseSqoopTool.HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+
+ importTool.validateOptions(options);
+ }
+
+ /**
+ * Note that append mode (--append) is designed to be used with HDFS import and not Hive import.
+ * However this test case is added to make sure that the error message generated is correct even if --append is used.
+ *
+ */
+ @Test
+ public void testValidationFailsWithHiveImportAndAppendModeIncrementalLastmodified() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHiveImport(true);
+ options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+ options.setIncrementalMode(SqoopOptions.IncrementalMode.DateLastModified);
+ options.setAppendMode(true);
+
+ thrown.expect(SqoopOptions.InvalidOptionsException.class);
+ thrown.expectMessage(BaseSqoopTool.HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+
+ importTool.validateOptions(options);
+ }
+
+ @Test
+ public void testValidationSucceedsWithHiveImportAndIncrementalAppendRows() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHiveImport(true);
+ options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+ options.setIncrementalMode(SqoopOptions.IncrementalMode.AppendRows);
+
+ importTool.validateOptions(options);
+ }
+
+ /**
+ * Note that append mode (--append) is designed to be used with HDFS import and not Hive import.
+ * However this test case is added to make sure that SQOOP-2986 does not break the already existing validation.
+ *
+ */
+ @Test
+ public void testValidationSucceedsWithHiveImportAndAppendModeAndIncrementalAppendRows() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHiveImport(true);
+ options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+ options.setIncrementalMode(SqoopOptions.IncrementalMode.AppendRows);
+ options.setAppendMode(true);
+
+ importTool.validateOptions(options);
+ }
+
+ private SqoopOptions buildBaseSqoopOptions() {
+ SqoopOptions result = new SqoopOptions();
+ result.setTableName(TABLE_NAME);
+ result.setConnectString(CONNECT_STRING);
+ return result;
+ }
+
+}
+