5
0
mirror of https://github.com/apache/sqoop.git synced 2025-05-03 05:50:31 +08:00

SQOOP-3034: HBase import should fail fast if using anything other than as-textfile

(Boglarka Egyed via Attila Szabo)
This commit is contained in:
Attila Szabo 2016-11-08 18:22:02 +01:00
parent b60aef1ffb
commit 53b490e146
2 changed files with 57 additions and 0 deletions

View File

@ -1689,6 +1689,11 @@ protected void validateHBaseOptions(SqoopOptions options)
BaseSqoopTool.HBASE_TABLE_ARG);
throw new InvalidOptionsException(validationMessage);
}
if (options.getHBaseTable() != null && options.getFileLayout() != SqoopOptions.FileLayout.TextFile) {
String validationMessage = String.format("Can't run HBase import with file layout: %s", options.getFileLayout());
throw new InvalidOptionsException(validationMessage);
}
}
/**

View File

@ -5,12 +5,39 @@
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import static com.cloudera.sqoop.SqoopOptions.FileLayout.SequenceFile;
import static com.cloudera.sqoop.SqoopOptions.FileLayout.AvroDataFile;
import static com.cloudera.sqoop.SqoopOptions.FileLayout.ParquetFile;
import static com.cloudera.sqoop.SqoopOptions.FileLayout.TextFile;
@RunWith(Parameterized.class)
public class ImportToolValidateOptionsTest {
@Parameters(name = "fileLayout = {0}, validationMessage = {1}")
public static Iterable<? extends Object> fileLayoutAndValidationMessageParameters() {
return Arrays.asList(new Object[] {SequenceFile, String.format("Can't run HBase import with file layout: %s", SequenceFile)},
new Object[] {AvroDataFile, String.format("Can't run HBase import with file layout: %s", AvroDataFile)},
new Object[] {ParquetFile, String.format("Can't run HBase import with file layout: %s", ParquetFile)});
}
private static final String TABLE_NAME = "testTableName";
private static final String CONNECT_STRING = "testConnectString";
private static final String CHECK_COLUMN_NAME = "checkColumnName";
private static final String HBASE_TABLE_NAME = "testHBaseTableName";
private static final String HBASE_COL_FAMILY = "testHBaseColumnFamily";
private SqoopOptions.FileLayout fileLayout;
private String validationMessage;
public ImportToolValidateOptionsTest(SqoopOptions.FileLayout fileLayout, String validationMessage) {
this.fileLayout = fileLayout;
this.validationMessage = validationMessage;
}
@Rule
public ExpectedException thrown = ExpectedException.none();
@ -81,6 +108,31 @@ public void testValidationSucceedsWithHiveImportAndAppendModeAndIncrementalAppen
importTool.validateOptions(options);
}
@Test
public void testValidationFailsWithHBaseImportAndFileLayoutDifferentFromTexFile() throws Exception {
SqoopOptions options = buildBaseSqoopOptions();
options.setHBaseTable(HBASE_TABLE_NAME);
options.setHBaseColFamily(HBASE_COL_FAMILY);
options.setFileLayout(fileLayout);
thrown.expect(SqoopOptions.InvalidOptionsException.class);
thrown.expectMessage(validationMessage);
importTool.validateOptions(options);
}
@Test
public void testValidationSucceedsWithHBaseImportAndAsTextFile() throws Exception {
SqoopOptions options = buildBaseSqoopOptions();
options.setHBaseTable(HBASE_TABLE_NAME);
options.setHBaseColFamily(HBASE_COL_FAMILY);
options.setFileLayout(TextFile);
thrown.none();
importTool.validateOptions(options);
}
private SqoopOptions buildBaseSqoopOptions() {
SqoopOptions result = new SqoopOptions();
result.setTableName(TABLE_NAME);