大数据--hive的基础认识(学习笔记)
一.什么是hive
Hive是基于Hadoop的数据仓库解决方案。由于Hadoop本身在数据存储(hdfs)和计算(Map-reduce)方面有很好的可扩展性和高容错性,因此使用Hive构建的数据仓库也秉承了这些特性。
也就是说,Hive就是在Hadoop上加了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦。
Hive封装了:1). 解释器 2).编译器 3).优化器
二.Hive的架构
.Hive就是大数据中的数据仓库,擅长处理格式良好的结构化数据。对非结构化并不合适;
.hive能够把结构良好的数据文件映射成一张关系数据库的表,并提供类似SQL(HQL)的查询功能
.Hive会把SQL语句转换成MapReduce任务运行
.提供ETL的工具
.Hive运行时,元数据存储在关系型数据库中
三. Hive的优缺点
优点:1).成本低,入手快 2). 不需要学习MapReduce开发
缺点:不支持实时查询,更适合离线任务
四.Hive的HQL说明
1). Hive 不是支持所有的SQL语句,不支持更新和删除操作,不支持单条插入。只支持批量的插入。(重点)
2). 不支持事物的增删改,仅仅支持批量导入
3). 数据保存:HDFS
4). 延时:hive延时高
5). hive的查询很慢,一般都写定时任务
6). hive的煊点是支持多表插入
五. Hive的数据类型
六. Hive的表
1). 托管表(managed table)(内部表)--如果删除内部表时,内部表的数据也会被删除
2). 外部表 --如果删除外部表时,外部表的数据不会被删除,所以一般设计外部表
3). 用命令查看内置服务: hive --service help
七. Hive创建表
创建表.create table emp
1).静态分区表
添加加分区:alter table emp add if not exists partition(dt='2017-06-13') //dt='2017-06-13'是分区名
查看分区:hadoop fs -ls /user/hive/warehouse/emp
创建目录:hadoop fs -mkdir /user/hive/warehouse/emp
查看表:show partitions emp
查看表结构:desc formatted emp
加载本地数据:load local inpath '/temp/a.txt' into table emp partition (dt='2019-06-13') // 把文件放到2019-06-13这个分区
查看文件内容:more a.txt
分区列在原始的数据中是不存在的,但是加载到hive中指定分区,用select查询后,分区列是存在的。
2).动态分区表
1.动态分区前先要设置一个参数:set hive.exec.dynamic.partition.mode=nonstrict;
2.insert into table emp_2 partition(dt) select name, salary, dt from emp;
3.set hive.exec.dynamic.partition.mode 执行,表示读当前配置的设置 加"=" 是修改
4.查看表的分区: show partitions emp_2