为什么sqoop在从Teradata到DOUBLE的导入中映射DECIMAL类型?

时间:2016-10-13 02:19:27

标签: hadoop hive teradata sqoop

我有Sqoop版本:1.4.6

将数据从Teradata导入Hive时,我发现DECIMAL类型转换为DOUBLE。

我想知道为什么Hive具有完全等效的数据类型。

1 个答案:

答案 0 :(得分:1)

这是因为他们通常为所有RDBMS编写它。

DECIMALDOUBLE映射。

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了解详情。