hive简述

先启动start-all.sh
使用beeline:
1.先开启hiveserver2
2.开启beeline
3.连接!connect jdbc:hive2://localhost:10000

 

hive
优点:
1.类SQL语法,快速开发
2.免去写MR,减少学习成本
3.处理大数据,延迟高
4.支持用户自定义函数

缺点:
1)表达能力有限
1.迭代式算法无法表达
2.数据挖掘方面不擅长
2)hive效率比较低
1.自动生成的mr通常不够智能化
2.调优困难


hive类似mysql
解析---编译--优化---执行
Meta store:关联hdfs中的file和表,存放元数据。默认存放在自带的derby数据库中,推荐mysql存放。

与数据库比较:
1.hive存在hdfs中,mysql存在本地
2.hive读多写少,数据在加载的时候确定好的
3.加载数据不进行任何处理,不能加索引,访问延迟非常高
4.执行通过mr来实现
5.可扩展性


数据类型比较
Sting相当于varchar 但是string不能声明存多少字符 理论上2GB

复杂数据类型:
array(string)
map(string,int)
struct(srteet:string,city:string)
都用array必须只用一个分隔符

上传到库中可以直接用hdfs put进去

cascade删除非空数据库

parttion by分区:
clustered by分桶:mr的分区


内部表外部表:
内部表:也是管理表,删除一个管理表,hive也删除表中数据
desc formatted student;(查看表结构)
create table student1 like student(复制表结构)
create table student1 as select*from student;(复制表结构和数据)

外部表:
create external table dept(deptid int,dname string,loc int)
row format delimited fields terminated by'\t';(外部表创建)
load data local inpath'/a/b/.txt' into table dept'(导入数据)
删除表以后,不会把数据删除
针对原始数据建表,要建外部表
重新建表以后表又回来了。

内部表外部表互相转换:
alter table student set tblproperties('EXTERNAL'='TRUE');(内部表转外部表)

分区表:
就是分文件夹
create table stu_partition(id int,name string)
partitioned by(month string)
row format delimited fieleds terminated by'\t';
查看分区表:desc stu_partition;
对分区表加分区:alter table languid add partition(month='')空格partition(month='');
删除分区:alter table languid drop partition(month='')逗号partition(month='')

二级分区:
分区字段是两个
分文件下还有文件夹


文件夹中有数据了,修复,或者把分区添加进来。


load方式:
从hdfs中是move移动
从本地是copy


查询:
通配符_1个
%0个或多个

posted @ 2019-08-03 16:25  Languid  阅读(298)  评论(0编辑  收藏  举报