hadoop介绍:https://blog.csdn.net/qq_40343117/article/details/100079532
hive的函数介绍(join、内置函数、窗口函数,有例子解析用法):https://blog.csdn.net/qq_40343117/article/details/100081228
1、hive是什么
一个数据仓库,将我们编写的sql表映射到hdfs上,方便存储以及查询修改等等操作。
2、hive的特点
1、可扩展性
很好理解,hive是依托于hadoop存在的,所以hive存储的数据也是在分布式文件系统上的,可以自由的扩展规模。
2、延展性
hive可以基于多种数据库作为元数据,它的默认数据库是derby,一般我都会使用mysql,但是不管是什么,都可以使用sql语言,所以可以根据自己的需求实现代码。
3、容错性
hive不会因为结点出现问题而停止运行。
3、hive和hadoop的流程
4、为什么使用Hive
直接使用hadoop所面临的问题
- 不好直接上手
- 项目周期要求太短
- MapReduce实现复杂查询逻辑开发难度太大,响应时间太长。
使用Hive的好处
- 操作接口采用类SQL语法,操作简单,且普及。
- 避免了去写MapReduce,减少开发人员的学习成本。
- 功能扩展很方便。
5、hive的内部表和外部表
sql语句中删除命令是drop …,当我们drop一个内部表时,我们删除的不仅是这个内部表的元数据,还包括它的数据目录等等。
而当我们drop一个外部表,我们只会删除它的元数据,不会删除别的。
6、hive的分区和分桶
1、分区
是我们在表的数据之外,自己给定义了一列用来区分表中的数据,他只是会显示,但是并不会存在在数据表中.
可以理解成一个个文件夹,我们起了不同的名字,然后将表中的数据放进去,关键词是partitioned by
。
注意,分区的写的关键词一定不能是数据表中存在的,必须不一样。
例如:
2、分桶
根据需求制定表的某一列为基准,加入分三个同,就用那列每个数据的hash值对3取模,相同的为一个桶,关键词是clustered by
注意,分桶的桶,必须是数据表中存在的。
7、hive shell命令交互
1、CREATE TABLE
创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;可以用 IF NOT EXISTS
选项来忽略这个异常。
2、EXTERNAL
关键字可以让用户创建一个外部表
3、通过
ROW FORMAT
DELIMITED FIELDS TERMINATED BY '.....'
去指定读取文件中的分隔符
4、hive的数据导入导出:
–导入数据到hive表
- 从本地导入: (本地目录)
load data local inpath ‘/home/1.txt’ (overwrite)into table student;
- 从Hdfs导入:(就是你配置安装hive时在hdfs上建立的目录)
load data inpath ‘/user/hive/warehouse/1.txt’ (overwrite)into table student;
- 查询导入:(导入一个查到的表)
create table student1 as select * from student;(也可以具体查询某项数据)
4.查询结果导入:
insert (overwrite)into table staff select * from track_log;
–导出hive表的数据到hdfs和本地磁盘
- 用insert overwrite导出方式 (最常用)
a) 导出到本地:
insert overwrite local directory ‘/home/robot/1/2’ rom format delimited fields terminated by ‘\t’ select * from staff;(递归创建目录)
b) 导出到HDFS
insert overwrite directory ‘/user/hive/1/2’ rom format delimited fields terminated by ‘\t’ select * from staff;
2.Bash shell覆盖追加导出
例如:$ bin/hive -e “select * from staff;” > /home/z/backup.log
3.Sqoop把hive数据导出到外部