hive概要、数据类型、列的分割符
什么是hive
- 构建在Hadoop之上的数据仓库
- Hive定义了一种类SQL查询语言:HQL(类似SQL但不完全相同)
- 通常用于进行离线数据处理(采用MapReduce)
- 底层支持多种不同的执行引擎(Hive on MapReduce、Hive on Tez、Hive on Spark)
- 支持多种不同的压缩格式、存储格式以及自定义函数(压缩:GZIP、LZO、Snappy、BZIP2… ; 存储:TextFile、SequenceFile、RCFile、ORC、Parquet ; UDF:自定义函数)
官网上的介绍
- Hive 数据仓库软件为分布式存储的大数据集上的读、写、管理提供很大方便,同时还可以用SQL语法在大数据集上查询。
- 是一种易于对数据实现提取、转换、加载的工具(ETL)的工具。可以理解为数据清洗分析展现。
- 它有一种将大量格式化数据强加上结构的机制。
- 它可以分析处理直接存储在hdfs中的数据或者是别的数据存储系统中的数据,如hbase。
- 查询的执行经由mapreduce完成。
- hive可以使用存储过程
- 通过Apache YARN和Apache Slider实现亚秒级的查询检索。
hive的安装模式
- hive的单机安装(使用derby做元数据存储)
- hive的独立安装模式(使用mysql做元数据存储)
- hive的远程安装模式
hive的数据类型
1.基本数据类型
类型 | 描述 | 示例 |
---|---|---|
TINYINT | 1字节 有符号整数 | 1 |
SMALLINT | 2字节 有符号整数 | 1 |
INT | 4字节 有符号整数 | 1 |
BIGINT | 8字节 有符号整数 | 1 |
FLOAT | 4字节 单精度浮点数 | 1.0 |
DOUBLE | 8字节 双精度浮点数 | 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) |
数据类型的例子
创建员工表,使用默认分割符
CREATE TABLE employee(
name STRING,
salary FLOAT,
leader ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>
)
;
列的分割符
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’。