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:
parent
b60aef1ffb
commit
53b490e146
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user