Постоянно хранить сопоставление sq oop --map-column-hive для DB2 - PullRequest
2 голосов
/ 12 июля 2020

Я импортирую несколько таблиц базы данных DB2 с помощью рабочего процесса Ooz ie, который использует Sq oop для импорта в Hive. В настоящее время мне нужно вручную сопоставить каждый столбец с неподдерживаемым типом данных с помощью "--map-column-hive".

Есть ли способ постоянно хранить сопоставления для определенных типов данных c? Я импортирую несколько таблиц, содержащих столбцы DB2- "Character", которые все должны быть вручную сопоставлены с HIVE- "STRING". Для ~ 50 таблиц существует ~ 200 столбцов, которые используют тип данных "Character" для FK, которые должны отображаться вручную.

Я хочу навсегда сохранить, что DB2- "Character" сопоставлен с типом данных HIVE- " STRING ". Можно ли это сделать?

с уважением

1 Ответ

1 голос
/ 22 июля 2020

Насколько я понимаю, 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, вы получите исключение.

Что бы я сделал в вашем случае (если не учитывать ручной столбец сопоставление):

  1. Еще раз убедитесь, что сопоставление типов для DB2 - "Character" не работает
  2. Загрузите исходники вашей версии Sq oop, добавьте новый if- ветвь в Db2Manager.toDbSpecificHiveType, создайте и протестируйте с некоторыми своими таблицами
  3. Создайте PR и дождитесь следующего выпуска ИЛИ используйте настроенную версию Sq oop (может быть болезненно, если вы хотите обновить Sq oop версия)
...