Hive的功能
使用SQL的方式读取分布式存储系统上的大量数据。
数据库:在线事务处理,并发性、事务性和低延迟性。
数据仓库:在线分析处理,有高的延迟。
Hive与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表中
注意事项:
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;
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文件中