3.1 基本数据类型
数据类型 | 长度 |
---|---|
tinyint | 1byte |
smallint | 2byte |
int | 4byte |
long | 8byte |
float | 单精度浮点数 |
double | 双精度浮点数 |
string | 字符串 |
timestamp | 时间戳类型 |
binary | 字节数组 |
tips:
- 一个表指定的数据只有三列,假如数据文件中一行的数据有五列。那么HIVE会自动忽略后面两列。
- float和double类型做对比时,hive会做一个隐式类型的转换,将float转化成double后再进行比较。
- 如何将一个string 转换成 int 。 cast (s as int)
3.2集合数据类型
数据类型 | 描述 | 语法示例 |
---|---|---|
struct | 类似于C语言中的结构体,访问时使用. 操作符访问成员变量。 | address Struct<street:string city:string state:string > |
map | 集合数据类型,类似Java集合中的map,使用['key'] 或者-> 运算符访问成员变量。 | deductions map<String, float> |
array | 数组数据类型,使用[index] 访问数据。 | citys Array<String> |
3.3 文本文件数据编码
用户一般喜欢使用以
逗号(CSV)文件或者制表符(TSV)文件
分割文本文件。HIve是支持这些文件格式的。
但是使用诸如,
这种字符,数据中可能也会包含,所以Hive默认的使用了几个控制字符。如下。
分割符 | 描述 |
---|---|
\n | 分隔行 |
^A | 分隔字段,在create table中可以使用八进制\001 表示。 |
^B | 分隔struct或者Array中的元素,使用\002 表示。 |
^C | 分隔map中的k-v键值对,使用\003 表示。 |
用户可以不使用这些默认分隔符,而是用其他分隔符。
row format delimited
fields terminated by '\001' # 列之间分隔符
collection items terminated by '\002' # 集合元素的分割符,诸如struct,array,map
map keys terminated by '\003' # map中k-v的分隔符
lines terminated by '\n' # 每一行的分隔符
stored as textfile; # 存储为文本文件
3.4 读时模式
- 写时模式:指的是在将数据写入数据库时,对数据的模式进行检查。如传统的数据库。
- 读时模式:不会再数据加载时进行验证,而是在数据查询时。如Hive。
那么如果加载的文件和模式不匹配会怎么样?
如果每行的数据少于模式中定义的,那么hive会置NULL
如果数据类型不匹配,Hive也会置NULL。