为什么sqoop将teradata导入中的十进制类型Map为double?

5q4ezhmt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(332)

我有一个sqoop版本:1.4.6
将teradata中的数据导入配置单元时,我发现十进制类型转换为double。
我想知道为什么当hive有一个完全等效的数据类型时会出现这种情况。

m528fe3b

m528fe3b1#

这是因为他们为所有rdbms编写了通用的。 DECIMAL Map为 DOUBLE .
源代码的有用部分:

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;
      }
  }

它们还为日期、时间、时间戳、十进制、数字sql数据类型的Map设置警告。

if (HiveTypes.isHiveTypeImprovised(colType)) {
    LOG.warn(
        "Column " + col + " had to be cast to a less precise type in Hive");
  }

有关详细信息,请查看源代码。

相关问题