Hive 数据类型
Hive数据类型详解
Hive 中的数据类型指的是Hive表中的列字段类型。
Hive 数据类型整体分为两个类别:原生数据类型(primitive data type)和复杂数据类型(complex data type)。
原生数据类型包括: 数值类型、时间类型、字符串类型、杂项数据类型;
复杂数据类型包括: array数组、map映射、struct结构、union联合体。
关于Hive的数据类型,需要注意:
- 英文字母大小写不敏感;
- 除 SQL 数据类型外,还支持 Java 数据类型,比如:string;
- int 和 string 是使用最多的,大多数函数都支持;
- 复杂数据类型的使用通常需要和分隔符指定语法配合使用。
- 如果定义的数据类型和文件不一致,Hive 会尝试隐式转换,但是不保证成功。
原生数据类型
Hive支持的原生数据类型如下图所示:
- 数值类型
- ByteType: 表示 1 字节长的有符号整型,数值范围 : -128 到 127。
- ShortType: 表示 2 字节长的有符号整型,数值范围 : -32768 到 32767。
- IntegerType: 表示 4 字节长的有符号整型,数值范围 : -2147483648 到 2147483647。
- LongType: 表示 8 字节长的有符号整型,数值范围 : -/* 9223372036854775808
- FloatType: 表示 4 字节长的单精度浮点数。
- DoubleType: 表示 8 字节长的双精度浮点数
- DecimalType: 表示任意精度有符号带小数的数值。内部使用 java.math.BigDecimal,一个BigDecimal 由一个任意精度的整数非标度值和一个 32 位的整数标度 (scale) 组成。
- 字符串类型
- StringType: 表示字符串值
- 二进制类型
- BinaryType: 表示字节序列值
- 布尔类型
- BooleanType: 表示布尔值
- 日期类型
- TimestampType: 表示包含年月日、时分秒等字段的日期值,如 2014-12-12 12:34:56
- DateType: 表示包含年月日字段的日期值
- 复杂类型(Complex types)
- ArrayType(elementType, containsNull): 数组类型,表示一个由类型为 elementType 的元素组成的序列,containsNull 用来表示 ArrayType 中的元素是否能为 null 值。
- MapType(keyType, valueType, valueContainsNull): 映射类型,表示一个键值对的集合。键的类型由 keyType 表示,值的类型则由 valueType 表示。对于一个 MapType 值,键是不允许为 null值。valueContainsNull 用来表示一个 MapType 的值是否能为 null 值
- StructType(fields): 表示由 StructField 序列描述的结构
- StructField(name, datatype, nullable): 表示 StructType 中的一个字段,name 表示字段名,datatype 是字段的数据类型,nullable 用来表示该字段是否可以为空值。
其中标注的数据类型是使用,详细的描述请查询语法手册:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
复杂数据类型
Hive 支持的复杂数据类型如下图所示:
其中标注的数据类型是使用,详细的描述请查询语法手册:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
数据类型隐式、显示转换
与SQL类似,HQL支持隐式和显式类型转换。原生类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。
下表描述了类型之间允许的隐式转换:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
显式类型转换使用CAST函数。
例如,CAST('100'as INT
会将100字符串转换为100整数值。如果强制转换失败,例如 CAST('INT'as INT)
,该函数返回 NULL。
Python 与 Hive 数据类型映射
Python → Hive
1 |
|
Hive → Python
1 |
|
Hive-Java类型对应
Hive数据类型 | Java数据类型 | Hadoop数据类型 |
---|---|---|
string |
java.lang.String |
org.apache.hadoop.io.Text` |
int |
java.lang.Integer |
org.apache.hadoop.io.IntWritable` |
boolean |
java.lang.Boolean |
org.apache.hadoop.io.BooleanWritable` |
array<type> |
java.util.List<Java type> |
|
map<ktype, vtype> |
java.util.Map<Java type for K, Java type for V> |
|
struct |
Don't use Simple UDF, use GenericUDF |
Hive 数据类型
https://flepeng.github.io/045-Hive-31-字段-Hive-数据类型/