我正在使用Oozie工作流程导入几个DB2数据库表,该工作流程使用Sqoop导入到Hive。目前,我必须使用“ --map-column-hive”手动将每个列映射为不受支持的数据类型。
有什么方法可以永久存储特定数据类型的映射?我正在导入几个包含DB2-“ Character”列的表,所有这些表都必须手动映射到HIVE-“ STRING”。 对于约50个表,有约200列使用FK数据类型为“字符”,必须手动进行映射。
我想永久保存DB2-“字符”被映射到数据类型HIVE-“ STRING”。 能做到吗?
致谢
答案 0 :(得分:1)
据我所知,Sqoop没有提供将类型间映射作为参数传递的功能。
它们都是hardcoded explicitly:
switch (sqlType) {
case Types.INTEGER:
case Types.SMALLINT:
return HIVE_TYPE_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 HIVE_TYPE_STRING;
case Types.NUMERIC:
case Types.DECIMAL:
case Types.FLOAT:
case Types.DOUBLE:
case Types.REAL:
return HIVE_TYPE_DOUBLE;
case Types.BIT:
case Types.BOOLEAN:
return HIVE_TYPE_BOOLEAN;
case Types.TINYINT:
return HIVE_TYPE_TINYINT;
case Types.BIGINT:
return HIVE_TYPE_BIGINT;
default:
// TODO(aaron): Support BINARY, VARBINARY, LONGVARBINARY, DISTINCT,
// BLOB, ARRAY, STRUCT, REF, JAVA_OBJECT.
return null;
}
还有XML columns in DB2的特殊情况:
if (colTypeName.toUpperCase().startsWith("XML")) {
return XML_TO_JAVA_DATA_TYPE;
}
如果此映射+用户定义的映射无法通过识别您的列类型
--map-column-hive
参数,您将获得异常。
在您的情况下我该怎么做(如果不考虑手动列映射的话):
Db2Manager.toDbSpecificHiveType
中添加一个新的if分支,使用一些表进行构建和测试