Hive架构设计原理
一、架构设计
- 特别说明:hive2.2以后版本变化较大,去掉了HWI模块,HiveCLI模式也直接采用了beeline链接
二、运行流程
三、基本使用
1.在能操作hive的用户下,hive回车
[dingtao@cluster3 ~]$ hive
2.此时已进入hive cli,这里的操作和MySQL里基本一致,!exit 或是 !quit均可以退出,老版本exit
3.操作总结
- 使用简单
- 面向数据和业务编程
hive数据模型
数据类型
1.数值型
| 类型 | 说明 |
|---|---|
| TINYINT | 1字节 -128~127 (一字节2的8次方) |
| SMALLINT | 2字节 -32768~32767 |
| INT ,INTEGER | 4字节 -2,147,483,648 to 2,147,483,647 |
| BIGINT | 8字节 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| FLOAT | 4字节 浮点型 |
| DOUBLE | 8字节 |
| DECIMAL | 用于保留准确精确度的列,例如会计系统中的货币数据column_name DECIMAL(P,D); |
2.日期类型
| 类型 | 说明 |
|---|---|
| TIMESTAMP | UNIX时间戳和可选的纳秒精度 |
| DATE | 描述特定的年/月/日,格式为YYYY-MM-DD |
3.字符串
| 类型 | 说明 |
|---|---|
| string | 最常用的字符串格式,等同于java String |
| varchar | 变长字符串,hive用的较多,最长为65535 |
| char | 定长字符串,比varchar更多一些,一般不要超过255个字符 |
- char和varchar char速度慢些,属于拿时间换空间
4.布尔类型
boolean 和Java的一样
5.字节数组
binary 字节数组类型,可以存储任意类型的数据用的很少
6.复杂(集合)数据类型
数据类型 描述 字面语法示例
STRUCT 和C语言中的struct或者”对象”类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用 struct(‘John’,‘Doe’)
MAP MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’ map(‘first’, ‘John’,‘last’,‘Doe’)
ARRAY 数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用 ARRAY(‘John’,‘Doe’)
hive数据文件格式和压缩格式
和hdfs的一样文件格式一般有.txt ,SequenceFile序列文件格式 .seq ,rcfile文件格式(.rc), orcfile文件格式(.orc)
压缩格式 lzo(.lzo),bzip2(.bz2),gzip(.gz), snappy(.snappy)
数据操作(hive sql)分类
| 操作分类 | 具体操作 | sql备注 |
|---|---|---|
| DDL | •创建数据库•建表 •删除表 •修改表结构 •创建/删除视图 •显示命令 | Create/Drop/Alter Database ; Create/Drop/Truncate Table; Alter Table/Partition/Column; Create/Drop/Alter View; Create/Drop Index; Create/Drop Function; Show functions; Describe function; |
| DML | •数据插入(insert,load) | load data…into table; insert overwrite table |
| DQL | •数据查询(select) |
1.DDL
建表说明
- 元数据:描述数据的数据
- 表分类:主要分内表和外表
- 内表:元数据和数据本身均被hive管理。删除表则全部删除。
- 外表:元数据被hive管理,数据本身存储在hdfs,不受hive管理。删除表则只删除元数据,数据本身不变。
建表模板
CREATE [external] TABLE [IF NOT EXISTS] table_name [(col_name data_type [comment col_comment], ...)] [comment table_comment] [partitioned by (col_name data_type [comment col_comment], ...)] [clustered by (col_name, col_name, ...) [sorted by (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [row format row_format] [stored as file_format] [location hdfs_path]
关键词解释
- external: 创建内部表还是外部表,此为内外表的唯一区分关键字,带它就是外部表。
- comment col_comment: 给字段添加注释
- comment table_comment: 给表本身添加注释
- partitioned by: 按哪些字段分区,可以是一个,也可以是多个
- clustered by col_name… into num_buckets BUCKETS:按哪几个字段做hash后分桶存储
- row format:用于设定行、列、集合的分隔符等设置
- stored as : 用于指定存储的文件类型,如text,rcfile等
- location : 设定该表存储的hdfs目录,如果不手动设定,则采用hive默认的存储路径
示例
创建学生表student,包括id,name,classid,classname及分区和注释信息。
CREATE TABLE student( id string comment '学号', username string comment '姓名', classid int comment '班级id', classname string comment '班级名称' ) comment '学生信息主表' partitioned by (come_date string comment '按入学年份分区') ROW FORMAT DELIMITED FIELDS TERMINATED BY ' 01' LINES TERMINATED BY 'n' STORED AS textfile;


