为什么 sqoop 将导入中的 DECIMAL 类型从 Teradata 映射到 DOUBLE?
Why does sqoop map DECIMAL types in an import from Teradata to DOUBLE?
我有 Sqoop 版本:1.4.6
将数据从 Teradata 导入 Hive 时,我发现 DECIMAL 类型被转换为 DOUBLE。
我想知道为什么 Hive 具有完全等效的数据类型。
这是因为他们为所有 RDBMS 通用地编写了它。
DECIMAL
映射为 DOUBLE
。
source code的有用部分:
public static String toHiveType(int sqlType) {
switch (sqlType) {
case Types.INTEGER:
case Types.SMALLINT:
return "INT";
case Types.VARCHAR:
case Types.CHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.NCHAR:
case Types.LONGNVARCHAR:
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
case Types.CLOB:
return "STRING";
case Types.NUMERIC:
case Types.DECIMAL:
case Types.FLOAT:
case Types.DOUBLE:
case Types.REAL:
return "DOUBLE";
case Types.BIT:
case Types.BOOLEAN:
return "BOOLEAN";
case Types.TINYINT:
return "TINYINT";
case Types.BIGINT:
return "BIGINT";
default:
// TODO(aaron): Support BINARY, VARBINARY, LONGVARBINARY, DISTINCT,
// BLOB, ARRAY, STRUCT, REF, JAVA_OBJECT.
return null;
}
}
他们还针对 DATE、TIME、TIMESTAMP、DECIMAL、NUMERIC SQL 数据类型的映射发出警告。
if (HiveTypes.isHiveTypeImprovised(colType)) {
LOG.warn(
"Column " + col + " had to be cast to a less precise type in Hive");
}
检查 source code 了解详情。
我有 Sqoop 版本:1.4.6
将数据从 Teradata 导入 Hive 时,我发现 DECIMAL 类型被转换为 DOUBLE。
我想知道为什么 Hive 具有完全等效的数据类型。
这是因为他们为所有 RDBMS 通用地编写了它。
DECIMAL
映射为 DOUBLE
。
source code的有用部分:
public static String toHiveType(int sqlType) {
switch (sqlType) {
case Types.INTEGER:
case Types.SMALLINT:
return "INT";
case Types.VARCHAR:
case Types.CHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.NCHAR:
case Types.LONGNVARCHAR:
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
case Types.CLOB:
return "STRING";
case Types.NUMERIC:
case Types.DECIMAL:
case Types.FLOAT:
case Types.DOUBLE:
case Types.REAL:
return "DOUBLE";
case Types.BIT:
case Types.BOOLEAN:
return "BOOLEAN";
case Types.TINYINT:
return "TINYINT";
case Types.BIGINT:
return "BIGINT";
default:
// TODO(aaron): Support BINARY, VARBINARY, LONGVARBINARY, DISTINCT,
// BLOB, ARRAY, STRUCT, REF, JAVA_OBJECT.
return null;
}
}
他们还针对 DATE、TIME、TIMESTAMP、DECIMAL、NUMERIC SQL 数据类型的映射发出警告。
if (HiveTypes.isHiveTypeImprovised(colType)) {
LOG.warn(
"Column " + col + " had to be cast to a less precise type in Hive");
}
检查 source code 了解详情。