【问题标题】:Why does sqoop map DECIMAL types in an import from Teradata to DOUBLE?为什么 sqoop 将 DECIMAL 类型从 Teradata 导入到 DOUBLE?
【发布时间】:2017-02-22 00:02:07
【问题描述】:

我有 Sqoop 版本:1.4.6

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

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

【问题讨论】:

    标签: hadoop hive teradata sqoop


    【解决方案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了解详情。

    【讨论】:

    • 如果他们能解决这个问题就好了。
    • @user55570 他们编写了基本映射,因为他们无法测试所有 RDBMS 的每种数据类型。这就是为什么我们有map-column-hive 标签
    • 是的,明白。也许源数据类型的类型映射的选项会很好,而不是必须枚举每个字段名称的更正。当然 double 是对 DECIMAL 类型的不良翻译,它可以是整数类型,所以能够以某种方式寻址会很好。
    • @user55570 是的,同意你的观点,还有改进的余地...:)
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 2015-11-12
    • 2023-02-22
    • 2011-12-10
    • 2014-02-10
    • 2015-03-25
    • 2015-09-25
    • 2022-01-15
    相关资源
    最近更新 更多