hive wiki
https://cwiki.apache.org/confluence/display/Hive#Home-UserDocumentation
hive的3种运行模式:
内嵌模式:将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。
本地模式:这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这就可以支持多会话和多用户连接了。
远程模式:此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。
知识早知道
Hive 并不提供实时的查询和基于行级的数据更新操作;
Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析;
Hive实际上是把sql语句转化为map reduce任务执行;
初始化hive的元数据库
schematool -dbType derby/mysql -initSchema
hive-site.xml配置信息
- hive.metastore.warehouse.dir:该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。
- hive.exec.scratchdir:该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。
hive管理
以jdbc或odbc的程序登录到hive中操作数据时,必须选用远程服务启动方式;
hive --service hiveserver &
查看hive的内置函数
show functions
在hive cli中查看hdfs目录
dfs -lsr /tmp/ (r:以递归的方式查看)
在hive cli中运行本地linux命令(加感叹号)
!pwd
在linux下直接运行hive命令
hive -e "show tables"
进入hive静默模式(不打印调试信息,如map,reduce任务信息,直接输出结果)
hive -S
显示数据库
show databases;
显示表
show tables;
查看表结构
desc tableName;
设置 hive cli(hive client:hive客户端)显示当前数据库
set hive.cli.print.current.db=true;
创建和使用数据库
create database chendb;
use chendb;
运行sql文件
source sql文件
hive数据类型
基本类型
复杂数据类型
时间类型
hive表操作
内部表
create table if not exists person(
id int,
name string,
age int
);
创建表时指定列与列之间的分隔符
create table test3(name string,age int) row format delimited fields terminated by ",";
通过已存在的表创建表
create table test2 as select * from test1
外部表
指向已在hdfs中存在的数据,可以创建partition
外部表只是一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除外部表时,仅删除该链接;
create external table if not exists person_1(
id int,
name string,
age int
) location '/home/hive/external';
location 指向一个目录;
表删除后目录也被删除了;
如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里
分区表
create table if not exists person(
id int,
name string
) partitioned by (sex string);
插入
insert into table person partition(sex="f") values(1,"chen","f");
查看执行计划 explain,对比有分区的执行效率
explain select * from test1 where age=24;
Bucket表(桶表)
桶表是对数据进行哈希取值,然后放到不同文件中存储;
create table cluster_table(id int,name string) clustered by(name) into 5 buckets
视图表
https://blog.youkuaiyun.com/AnneQiQi/article/details/51422155
创建视图
CREATE VIEW valid_records AS
SELECT * FROM records2
WHERE temperature != 999
删除视图
drop view if exists view_name;
hive不支持物化视图,mysql和oracle支持