Hive的功能
使用SQL的方式读取分布式存储系统上的大量数据。
数据库:在线事务处理,并发性、事务性和低延迟性。
数据仓库:在线分析处理,有高的延迟。
Hive与Hbase区别:
1.Hive是数据仓库工具,用于分析大数据;hbase是数据库工具,用于存储NoSQL的数据库。
2.Hive因为执行HQL语句,基于MR处理数据时间,耗时长;hbase可实时查询数据
Hive的数据存储于HDFS上,结构化信息存储在MySQL表里。(hive的数据库和表是HDFS的目录,数据是HDSF文件)
进入hive中可以通过dfs -XX 的命令直接访问hdfs
•HiveServer2
使用hiveserver2服务器,实现客户端以jdbc协议远程访问hive。(客户端不需要安装hive)
•常用命令
desc database XXX/ 某表;
create table test01 as select from test; 复制表数据同时创建内部表
create external table ext_test like test; 复制test的表结构
insert into ext_test select
from test; 复制表数据到外部表
alter table test add columns (id , int); 添加表中的列
desc formatted test; 查询表的详细信息
•内/外部表
内部表删除表时,数据一同删除
外部表删除表时,只删除表结构,恢复MySQL中表结构时,可正常使用表
•分区表(加快数据查询效率)
在表的目录层级下创建子目录(分区目录)
alter table par_test add partition (year=2019,month=8);
•桶表(加快数据查询效率)
每个桶是表目录里的一个文件,通过hash进行分桶,分桶键只能有一个
桶表只能通过普通表进行数据导入
hive导入/导出
加载本地文件至hive表中
注意事项:
1.hive中设置table的字符分隔符一定要和本地文件中的分隔符对应,不然表中显示NULL
2.本地数据导入,相当于复制操作,导入后本地数据依然存在;从HDFS导入至hive后,相当于剪切操作,导入后hdfs文件不存在
Load data local inpath ‘/home/test01/hello.txt’into table doc_count; 本地文件
Load data inpath ‘/home/test01/hello.txt’into table doc_count; HDFS文件
导出hive数据至本地
insert overwrite local directory ‘/home/test01/out’ row format delimited fields terminated by ‘,’ select * from test;
•View视图,虚表
create view v_test as select name,age from test; 将select name,age from test的操作定义为v_test
alter view v_test as select XXX; 修改操作
导入/导出表
export table test to ‘ /data/user/hive/warehouse/test.db/export’;
import from ‘ /data/user/hive/warehouse/test.db/export’;(如果同名表已经存在即报错)
import table test111 from ‘ /data/user/hive/warehouse/test.db/export’;(如果同名表已经存在可创建新表)
import external table test111 from ‘ /data/user/hive/warehouse/test.db/export’;(导入至新创建的新外部表)
表的连接
表的连接同MySQL,有左连接、右连接和全连接。
查询
去重查询:select distinct name from test;
嵌套子查询:select a.* from (select name from test) a where a.name like ‘w%’;先查询test中名字列,再从名字列查询含w的名字
注意:子查询必须要加别名,as xx,其中as可以省略
Hive执行脚本
单句命令:hive –e “select from test.test”
脚本命令:hive –f /home/test01/hive_test.sql
hive –e “select
from test.test” > test1.txt 将查询到的结果覆盖到test1.txt文件中
hive –e “select * from test.test” | hdfs dfs –appendToFile - /user/…test 将查询的结果添加到hdfs文件中
来源:oschina
链接:https://my.oschina.net/u/4416290/blog/4540387