Насколько я понимаю, Sq oop не предоставляет возможности передавать сопоставления типов в качестве параметров. Все они жестко запрограммированы явно :
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;
}
Также существует специальный регистр c для XML столбцов в DB2 :
if (colTypeName.toUpperCase().startsWith("XML")) {
return XML_TO_JAVA_DATA_TYPE;
}
Если ваш тип столбца не распознается этим сопоставлением + пользовательские сопоставления с помощью параметра --map-column-hive
, вы получите исключение.
Что бы я сделал в вашем случае (если не учитывать ручной столбец сопоставление):
- Еще раз убедитесь, что сопоставление типов для DB2 - "Character" не работает
- Загрузите исходники вашей версии Sq oop, добавьте новый if- ветвь в
Db2Manager.toDbSpecificHiveType
, создайте и протестируйте с некоторыми своими таблицами - Создайте PR и дождитесь следующего выпуска ИЛИ используйте настроенную версию Sq oop (может быть болезненно, если вы хотите обновить Sq oop версия)