-
hive是将SQL语言转换成MapReduce程序并提交到Yarn上运行,读取HDFS上数据进行处理
sql query :类似于MySql数据库的SQL
SQL on Hadoop:建立在Hadoop之上提供SQL方式分析数据的框架 (hive-Facebook开源的,presto-京东,spark sql)
- hive中表有内部表和外部表
- 内部表和外部表区别
1.内部表不吸烟指定数据存放目录,它默认在/user/hive/warehouse/db目录/表名目录
2.而外部表的数据存放目录是可以任意指定的;
3.内部表被删除时,表定义和表数据都会被删除
4.外部表被删除时,表定义会被删除,但是表数据依旧保留 -
hive启动
bin/hive --启动为 一个单机交互式程序
启动为服务
bin/hiveserver2 -- 服务启动在前台,但不接受任何操作
然后查看hive服务是否启动成功:netstat-nltp | grep 10000 等待。。找是否有10000
然后可以用客户端去连接hive 服务,进行sql 操作
bin/beeline -u jdbc:hive2:// localhost:10000-n root
- 内部表的创建
create table emp
(empo int,
ename string,
job string,
mgr int) row format delimited fields terminated by ',';
(因hive表里默认分隔符是制表符,如果上传的数据是以逗号分隔,需改变分隔符)
hive sql 不能单条修改数据 ,需要整体修改;
- 外部表的创建
create external table emp
(empo int,
ename string,
job string,
mgr int) row format delimited fields terminated by ',';
-
导入数据
方式1:用hdfs命令put到表所在目录
load data inpath '/input/emp.csv' into table emp;
方式2:用hive语句导入
load data local inpath '/root/abc/' into table t1
- 删除库/表
drop table stu;
drop database mydb; -- 删除没有表的空库
drop database mydb cascade; -- 删除非空的库
-
分区表
分区表跟普通表区别于,分区表的数据可以按照某个标志的不同值,来存储在不同子文件夹中;
create table tf_log (ip string,url string)
partitioned by (dt string) -- 指定分区
row format delimited fields terminated by ',';
-- 插入数据 对分区表导入数据,必须指定导入到哪个分区
load data local inpath '/root/hivedata/log.2019-12-02'
into table tf_log partition(dt='2019-12-02')
-- 查询分区信息: show partitions tf_log;
-- 删除一个分区
alter table tf_log drop partition(dt='2109-12-01');
-- 添加分区
alter table tf_log add psrtition(dt='2019-07-14') location '/log14';
- 插入数据
-- 插入数据
insert into table_1 select * from table_2; -- 在table_1后追加数据
insert overwrite table_1 select * from table_2; -- 先将table_1中数据清空,然后添加数据
-- 提取数据常用语句
select [distinct] select_expr_1, select_expr_2
from table_name
[where condition] -- 筛选条件
[group by col_list [having condition]] -- 分组、分组返回的条件
[order by col_list] -- 排序
[limit num_1, num_2] -- 返回数据的起始位置(num_1)以及返回数据的记录数(num_2)