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

SQOOP-1046: Sqoop2: Importing single row using decimal splitter will not import anything

(Jarek Jarcec Cecho via Kate Ting)
This commit is contained in:
Kate Ting 2013-05-15 00:51:28 -04:00
parent c0a43d436f
commit 2941fa666c
2 changed files with 36 additions and 1 deletions

View File

@ -169,7 +169,7 @@ protected List<Partition> partitionFloatingPointColumn() {
protected List<Partition> partitionNumericColumn() {
List<Partition> partitions = new LinkedList<Partition>();
// All null valeus will result in single partition
// All null values will result in single partition
if (partitionMinValue == null && partitionMaxValue == null) {
GenericJdbcImportPartition partition = new GenericJdbcImportPartition();
partition.setConditions(partitionColumnName + "IS NULL");
@ -185,6 +185,13 @@ protected List<Partition> partitionNumericColumn() {
BigDecimal minValue = new BigDecimal(partitionMinValue);
BigDecimal maxValue = new BigDecimal(partitionMaxValue);
// Having one single value means that we can create only one single split
if(minValue.equals(maxValue)) {
GenericJdbcImportPartition partition = new GenericJdbcImportPartition();
partition.setConditions(constructConditions(minValue));
partitions.add(partition);
}
// Get all the split points together.
List<BigDecimal> splitPoints = new LinkedList<BigDecimal>();
@ -240,4 +247,13 @@ protected String constructConditions(
conditions.append(upperBound);
return conditions.toString();
}
protected String constructConditions(Object value) {
return new StringBuilder()
.append(partitionColumnName)
.append(" = ")
.append(value)
.toString()
;
}
}

View File

@ -238,6 +238,25 @@ public void testNumericUnevenPartition() throws Exception {
});
}
public void testNumericSinglePartition() throws Exception {
MutableContext context = new MutableMapContext();
context.setString(GenericJdbcConnectorConstants.CONNECTOR_JDBC_PARTITION_COLUMNNAME, "DCOL");
context.setString(GenericJdbcConnectorConstants.CONNECTOR_JDBC_PARTITION_COLUMNTYPE, String.valueOf(Types.NUMERIC));
context.setString(GenericJdbcConnectorConstants.CONNECTOR_JDBC_PARTITION_MINVALUE, String.valueOf(new BigDecimal(START)));
context.setString(GenericJdbcConnectorConstants.CONNECTOR_JDBC_PARTITION_MAXVALUE, String.valueOf(new BigDecimal(START)));
ConnectionConfiguration connConf = new ConnectionConfiguration();
ImportJobConfiguration jobConf = new ImportJobConfiguration();
Partitioner partitioner = new GenericJdbcImportPartitioner();
PartitionerContext partitionerContext = new PartitionerContext(context, 3);
List<Partition> partitions = partitioner.getPartitions(partitionerContext, connConf, jobConf);
verifyResult(partitions, new String[]{
"DCOL = -5",
});
}
private void verifyResult(List<Partition> partitions,
String[] expected) {
assertEquals(expected.length, partitions.size());