mirror of
https://github.com/apache/sqoop.git
synced 2025-05-03 00:42:27 +08:00
SQOOP-3233: SqoopHCatImportHelper.convertNumberTypes check for Varchar instead of Char
(Ferenc Szabo via Szabolcs Vasas)
This commit is contained in:
parent
a50869437e
commit
855c56fef8
@ -335,9 +335,7 @@ private Object converDateTypes(Object val, HCatFieldSchema hfs) {
|
||||
|
||||
private Object convertStringTypes(Object val, HCatFieldSchema hfs) {
|
||||
HCatFieldSchema.Type hfsType = hfs.getType();
|
||||
if (hfsType == HCatFieldSchema.Type.STRING
|
||||
|| hfsType == HCatFieldSchema.Type.VARCHAR
|
||||
|| hfsType == HCatFieldSchema.Type.CHAR) {
|
||||
if (isStringType(hfsType)) {
|
||||
String str = val.toString();
|
||||
if (doHiveDelimsReplacement) {
|
||||
str = FieldFormatter.hiveStringReplaceDelims(str,
|
||||
@ -400,59 +398,71 @@ private Object convertNumberTypes(Object val, HCatFieldSchema hfs) {
|
||||
return null;
|
||||
}
|
||||
if (val instanceof BigDecimal
|
||||
&& hfsType == HCatFieldSchema.Type.STRING
|
||||
|| hfsType == HCatFieldSchema.Type.VARCHAR
|
||||
|| hfsType == HCatFieldSchema.Type.CHAR) {
|
||||
&& isStringType(hfsType)) {
|
||||
BigDecimal bd = (BigDecimal) val;
|
||||
String bdStr = null;
|
||||
if (bigDecimalFormatString) {
|
||||
bdStr = bd.toPlainString();
|
||||
} else {
|
||||
bdStr = bd.toString();
|
||||
}
|
||||
if (hfsType == HCatFieldSchema.Type.VARCHAR) {
|
||||
VarcharTypeInfo vti = (VarcharTypeInfo) hfs.getTypeInfo();
|
||||
HiveVarchar hvc = new HiveVarchar(bdStr, vti.getLength());
|
||||
return hvc;
|
||||
} else if (hfsType == HCatFieldSchema.Type.VARCHAR) {
|
||||
CharTypeInfo cti = (CharTypeInfo) hfs.getTypeInfo();
|
||||
HiveChar hChar = new HiveChar(bdStr, cti.getLength());
|
||||
return hChar;
|
||||
} else {
|
||||
return bdStr;
|
||||
}
|
||||
return convertBigDecimalToTextTypes(hfs, hfsType, bd);
|
||||
}
|
||||
Number n = (Number) val;
|
||||
return convertNumberToAnyType(hfs, hfsType, n);
|
||||
}
|
||||
|
||||
private boolean isStringType(HCatFieldSchema.Type hfsType) {
|
||||
return hfsType == HCatFieldSchema.Type.STRING
|
||||
|| hfsType == HCatFieldSchema.Type.VARCHAR
|
||||
|| hfsType == HCatFieldSchema.Type.CHAR;
|
||||
}
|
||||
|
||||
private Object convertNumberToAnyType(HCatFieldSchema hfs, HCatFieldSchema.Type hfsType, Number number) {
|
||||
if (hfsType == HCatFieldSchema.Type.TINYINT) {
|
||||
return n.byteValue();
|
||||
return number.byteValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.SMALLINT) {
|
||||
return n.shortValue();
|
||||
return number.shortValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.INT) {
|
||||
return n.intValue();
|
||||
return number.intValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.BIGINT) {
|
||||
return n.longValue();
|
||||
return number.longValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.FLOAT) {
|
||||
return n.floatValue();
|
||||
return number.floatValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.DOUBLE) {
|
||||
return n.doubleValue();
|
||||
return number.doubleValue();
|
||||
} else if (hfsType == HCatFieldSchema.Type.BOOLEAN) {
|
||||
return n.byteValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
|
||||
return number.byteValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
|
||||
} else if (hfsType == HCatFieldSchema.Type.STRING) {
|
||||
return n.toString();
|
||||
return number.toString();
|
||||
} else if (hfsType == HCatFieldSchema.Type.VARCHAR) {
|
||||
VarcharTypeInfo vti = (VarcharTypeInfo) hfs.getTypeInfo();
|
||||
HiveVarchar hvc = new HiveVarchar(val.toString(), vti.getLength());
|
||||
HiveVarchar hvc = new HiveVarchar(number.toString(), vti.getLength());
|
||||
return hvc;
|
||||
} else if (hfsType == HCatFieldSchema.Type.CHAR) {
|
||||
CharTypeInfo cti = (CharTypeInfo) hfs.getTypeInfo();
|
||||
HiveChar hChar = new HiveChar(val.toString(), cti.getLength());
|
||||
HiveChar hChar = new HiveChar(number.toString(), cti.getLength());
|
||||
return hChar;
|
||||
} else if (hfsType == HCatFieldSchema.Type.DECIMAL) {
|
||||
return convertNumberIntoHiveDecimal(n);
|
||||
return convertNumberIntoHiveDecimal(number);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Object convertBigDecimalToTextTypes(HCatFieldSchema hfs, HCatFieldSchema.Type hfsType, BigDecimal bigDecimal) {
|
||||
String bdStr = null;
|
||||
if (bigDecimalFormatString) {
|
||||
bdStr = bigDecimal.toPlainString();
|
||||
} else {
|
||||
bdStr = bigDecimal.toString();
|
||||
}
|
||||
if (hfsType == HCatFieldSchema.Type.VARCHAR) {
|
||||
VarcharTypeInfo vti = (VarcharTypeInfo) hfs.getTypeInfo();
|
||||
HiveVarchar hvc = new HiveVarchar(bdStr, vti.getLength());
|
||||
return hvc;
|
||||
} else if (hfsType == HCatFieldSchema.Type.CHAR) {
|
||||
CharTypeInfo cti = (CharTypeInfo) hfs.getTypeInfo();
|
||||
HiveChar hChar = new HiveChar(bdStr, cti.getLength());
|
||||
return hChar;
|
||||
} else {
|
||||
return bdStr;
|
||||
}
|
||||
}
|
||||
|
||||
HiveDecimal convertNumberIntoHiveDecimal(Number number) {
|
||||
BigDecimal bigDecimal = null;
|
||||
|
||||
|
@ -446,6 +446,18 @@ public void testNumberTypes() throws Exception {
|
||||
"decimal(18,2)", Types.DECIMAL, HCatFieldSchema.Type.DECIMAL, 18, 2,
|
||||
HiveDecimal.create(new BigDecimal("2000")),
|
||||
new BigDecimal("2000"), KeyType.NOT_A_KEY),
|
||||
HCatalogTestUtils.colGenerator(HCatalogTestUtils.forIdx(3),
|
||||
"decimal(18,2)", Types.DECIMAL, HCatFieldSchema.Type.VARCHAR, 20, 0,
|
||||
new HiveVarchar("1999", 20), new BigDecimal("1999"), KeyType.NOT_A_KEY),
|
||||
HCatalogTestUtils.colGenerator(HCatalogTestUtils.forIdx(4),
|
||||
"decimal(18,2)", Types.DECIMAL, HCatFieldSchema.Type.CHAR, 20, 0,
|
||||
new HiveChar("1998", 20), new BigDecimal("1998"), KeyType.NOT_A_KEY),
|
||||
HCatalogTestUtils.colGenerator(HCatalogTestUtils.forIdx(5),
|
||||
"int", Types.INTEGER, HCatFieldSchema.Type.VARCHAR, 20, 0,
|
||||
new HiveVarchar("2001", 20 ), new BigDecimal("2001"), KeyType.NOT_A_KEY),
|
||||
HCatalogTestUtils.colGenerator(HCatalogTestUtils.forIdx(6),
|
||||
"int", Types.INTEGER, HCatFieldSchema.Type.CHAR, 20, 0,
|
||||
new HiveChar("2002", 20), new BigDecimal("2002"), KeyType.NOT_A_KEY),
|
||||
};
|
||||
List<String> addlArgsArray = new ArrayList<String>();
|
||||
setExtraArgs(addlArgsArray);
|
||||
|
Loading…
Reference in New Issue
Block a user