测试HIVE如何处理NUMBER类型数据
- 以TEST.NUMTEST为例
Environment
Product | Version |
---|---|
HDP | 2.4.0.0-169 |
Sqoop | 1.4.6.2.4.0.0-169 |
Hive | 1.2.1000.2.4.0.0-169 |
Oracle | 11g.203 |
TEST.NUMTEST表结构:
表内容:
Purpose
测试出Hive处理NUMBER类型的结果
Procedure
1、不进行map-column-hive,直接导入,sqoop语句如下:
1 | sqoop import --connect 'jdbc:oracle:thin:@10.143.90.12:1521:infodb' --username bdc --password bdc --table TEST.NUMTEST --hive-import --hive-database TEST --hive-table numtest --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-overwrite --delete-target-dir --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' -m 1 |
HIVE处理结果:
1 | hive> desc NUMTEST; |
2、转化规则如下:
–map-column-hive THREE=tinyint,FIFTEEN=bigint,TEN=int,NINE=int,TWENTYTWO=bigint,NINETEEN=bigint
HIVE处理结果:
1 | hive> desc NUMTEST; |
3、单独测试,NUMBER(15)转为INT
HIVE处理结果:
1 | hive> desc NUMTEST; |
4、单独测试,NUMBER(19)转为INT
1 | hive> desc NUMTEST; |
5、测试NUMBER(22)转为string:
–map-column-hive THREE=tinyint,FIFTEEN=bigint,TEN=int,NINE=int,TWENTYTWO=string,NINETEEN=bigint
HIVE结果:
1 | hive> desc NUMTEST; |
6、测试NUMBER(11)转为INT和BIGINT
INT的HIVE结果:
1 | hive> desc NUMTEST; |
BIGINT的HIVE结果:
1 | hive> desc NUMTEST; |
7、测试NUMBER无长度,无精度类型,需要转成string
Hive的结果:
1 | hive> desc numtest; |
8、双精度double类型,转成string
1 | hive> desc numtest; |
Conclusion
HIVE转化Oracle的NUMBER数据类型结论如下:
Orace数据类型 | Hive数据类型 |
---|---|
NUMBER(1)~NUMBER(3) | TINYINT |
NUMBER(4)~NUMBER(10) | INT |
NUMBER(11)~NUMBER(19) | BIGINT |
NUMBER(20)以上 | STRING |
HIVE数据类型转换
所有类型 | BOOLEAN | TINYINT | SMALLINT | INT | BIGINT | FLOAT | DOUBLE | DECIMAL | STRING | VARCHAR | TIMESTAMP | DATE | BINARY |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BOOLEAN | true | false | false | false | false | false | false | false | false | false | false | false | false |
TINYINT | false | true | true | true | true | true | true | true | true | true | false | false | false |
SMALLINT | false | false | true | true | true | true | true | true | true | true | false | false | false |
INT | false | false | false | true | true | true | true | true | true | true | false | false | false |
BIGINT | false | false | false | false | true | true | true | true | true | true | false | false | false |
FLOAT | false | false | false | false | false | true | true | true | true | true | false | false | false |
DOUBLE | false | false | false | false | false | false | true | true | true | true | false | false | false |
DECIMAL | false | false | false | false | false | false | false | true | true | true | false | false | false |
STRING | false | false | false | false | false | false | true | true | true | true | false | false | false |
VARCHAR | false | false | false | false | false | false | true | true | true | true | false | false | false |
TIMESTAMP | false | false | false | false | false | false | false | false | true | true | true | false | false |
DATE | false | false | false | false | false | false | false | false | true | true | false | true | false |
BINARY | false | false | false | false | false | false | false | false | false | false | false | false | true |