mirror of
https://github.com/apache/sqoop.git
synced 2025-05-03 19:51:41 +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);
|
BaseSqoopTool.HBASE_TABLE_ARG);
|
||||||
throw new InvalidOptionsException(validationMessage);
|
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.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.ExpectedException;
|
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 {
|
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 TABLE_NAME = "testTableName";
|
||||||
private static final String CONNECT_STRING = "testConnectString";
|
private static final String CONNECT_STRING = "testConnectString";
|
||||||
private static final String CHECK_COLUMN_NAME = "checkColumnName";
|
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
|
@Rule
|
||||||
public ExpectedException thrown = ExpectedException.none();
|
public ExpectedException thrown = ExpectedException.none();
|
||||||
@ -81,6 +108,31 @@ public void testValidationSucceedsWithHiveImportAndAppendModeAndIncrementalAppen
|
|||||||
importTool.validateOptions(options);
|
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() {
|
private SqoopOptions buildBaseSqoopOptions() {
|
||||||
SqoopOptions result = new SqoopOptions();
|
SqoopOptions result = new SqoopOptions();
|
||||||
result.setTableName(TABLE_NAME);
|
result.setTableName(TABLE_NAME);
|
||||||
|
Loading…
Reference in New Issue
Block a user