目录
1.基本数据类型
2.复杂数据类型
3.数据类型应用举例
4.列的分割符
1.基本数据类型
类型 | 描述 | 示例 |
TINYINT | 1字节 有符号整数 | 1 |
SMALLINT | 2字节 有符号整数 | 1 |
INT | 4字节 有符号整数 | 1 |
BIGINT | 8字节 有符号整数 | 1 |
FLOAT | 4字节 单精度浮点型 | 1.0 |
DOUBLE | 8字节 shuang | 1.0 |
BOOLEAN | true/false | TRUE |
STRING | 字符串 | “a” 'a' |
BINARY | 字节数组 | |
TIMESTAMP | 精度到纳秒的时间戳 | 132550245000,‘2016-01-01 03:04:05.123456789' |
新增数据类型TIMESTAMP的值可以是:
- 整数:距离Unix新纪元时间(1970年1月1日,午夜12点)的秒数
- 浮点数:距离Unix新纪元时间的秒数,精确到纳秒(小数点后保留9位数)
- 字符串:JDBC所约定的时间字符串格式,格式为:YYYY-MM-DD hh:mm:ss:fffffffff
BINARY数据类型用于存储变长的二进制数据。
2.复杂数据类型
类型 | 描述 | 示例 |
ARRAY | 一组有序字段,字段的类型必须相同 | array(1,2) |
MAP | 一组无需的键值对,键的类型必须是原子的,值可以是任何类型。同一个映射的键的类型必须相同,值的类型也必须相同。 | map(‘a’,1,’b’,2) |
STRUCT | 一组命名的字段,字段的类型可以不同 | struct(‘a’,1,1,0) |
3.数据类型应用举例
##创建员工表,使用默认分割符
CREATE TABLE employee(
name STRING,
salary FLOAT,
leader ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>
)
;
4.列的分割符
HiveQL文本文件数据编码表
类型 | 描述 |
\n | 对于文本文件来说,每行都是一条记录,因此换行符可以分割记录 |
^A(Ctrl+A) | 用于分隔字段(列)。在CREATE TABLE语句中可以使用八进制编码\001表示 |
^B | 用于分隔ARRARY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE语句中可以使用八进制编码\002表示 |
^C | 用于MAP中键和值之间的分隔。在CREATE TABLE语句中可以使用八进制编码\003表示 |
CREATE TABLE employee(
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
- [ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符;
- FIELDS TERMINATED BY '\001' ,字符\001是^A的八进制数。这个子句表明Hive将使用^A字符作为列分隔符。
- COLLECTION ITEMS TERMINATED BY '\002' ,字符\002是^B的八进制数。这个子句表明Hive将使用^B字符作为集合元素的分隔符。
- MAP KEYS TERMINATED BY '\003' ,字符\003是^C的八进制数。这个子句表明Hive将使用^C字符作为map的键和值之间的分隔符。
- LINES TERMINATED BY '\n' 、STORED AS TEXTFILE这个两个子句不需要ROW FORMAT DELIMITED 关键字
- Hive目前对于LINES TERMINATED BY…仅支持字符‘\n’,行与行之间的分隔符只能为‘\n’。