2016-10-13 8 views

答えて

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を参照してください。

+0

これを修正できるといいですか? – paolov

+0

@ user55570彼らはすべてのRDBMSのすべてのデータ型をテストすることができないので、彼らは基本的なマッピングを書いていました。だから我々は 'map-column-hive'タグを持っているのです –

+0

はい、分かります。たぶん、ソースデータ型の型マッピングのオプションは、すべてのフィールド名の訂正を列挙するのではなく、うまくいくでしょう。もちろん、doubleは整数型のDECIMAL型の貧弱な変換であるため、どうにかして対処できるのは良いでしょう。 – paolov

関連する問題