目录
1 hive配置参数查询以及修改
2 生产常用基本字段类型
3 DDL语法
4 DML语法
5 hive自带函数详解
1.1hive日志文件存储目录修改
默认hive运行日志配置在HIVE_HOME/conf/hive-log4j.properties.template,配置参数为hive.log.dir=${java.io.tmpdir}/${user.name},当前我的即为/tmp/hadoop/。若想更改默认配置,复制一份hive-log4j.properties.template文件去掉.template修改即可。
1.2 常用配置参数查询:hive.apache.org
这里有hive所有的相关配置。
1.3常用配置方式
1)在hive命令行修改,只对当前session有效,即改即用
set hive.metastore.warehouse.dir;
set key # 取值
set key=value #设置值
2) 修改hive-site.xml文件,需重启,对所有作业有效
扩展1:生产中,一般集群被多个项目共用,故修改hive的参数,可采用1)的方式然修改后,最终改回去,不影响别人使用。
数值类型: int、bigint、float、double、DECIMAL
字符串:string
布尔类型:true、false #生产用1/0代替
时间类型:date、TIMESTAMP 等 #生产用字符串代替,如:19010101010101
进入官网可查询最新的DDL语法,生产常用DDL有:CREATE/DROP/ALTER/MSCK/SHOW/DESCRIBE等 。
3.1数据库操作
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)]; #[]表示可有可无
CREATE DATABASE hive; #创建数据库
desc database hive; #查看数据库存储数据目录信息的等
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE]; #删除数据库
USE database_name; 使用数据库
3.2数据库元数据查询
mysql -uroot -p #登录mysql
show databases;
use ruoze_d6
show tablses;
select * from dbs \G #查看有hive有哪些数据库,\G表示格式化输出
扩展2:DB/TABLE/PARTITION都会有相对应的hdfs上 目录/文件夹
3.3表的操作
语法又臭又长这里省略了,具体可参考官网,下面将列举常用的表操作案列。
#创建员工1信息表,并指定行的格式
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
#加载数据入员工表,local 表示数据从本地获取,未指定则是指hdfs,这是DML语法
LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp ;
#创建员工2拷贝表结构
CREATE TABLE emp2 LIKE emp;
#创建员工3拷贝表结构以及表数据,需要跑MR
create table emp3 as select * from emp;
#创建外部表,用external修饰,其它语法与内部表一致
create external table emp4 like emp;
#查看表的结构
desc emp; #查看表的简单信息
desc formatted emp; #查看表的详细信息
drop table emp2 #删除表
alter table emp rename to new_emp; #重名了表
3.4表元数据查询
mysql -uroot -p #登录mysql
show databases;
use ruoze_d6
show tablses;
select * from tbls \G;
扩展3:hive进程信息,jps显示为RunJar。若未关闭可通过kill -9 结束它
扩展4:当磁盘空间达到90%时dn节点将处于不健康状态,若此时只有一个dn,则MR永远不会执行
扩展5:hive默认创建的表为内部表,内部表加载数据时一定会有一份数据在相应的hive数据目录,而外部表不会,其次外部表删除时只会删除元数据,不会删除数据
DML语法包括load/insert/update/delete/merge等,虽然hive支持增、删、改的操作,但是生产环境几乎不用,性能很低下,事务、主键、外键等对于大数据来说是鸡肋。
4.1加载数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename #语法
create table dept(
deptno int,
dname string,
location string
) row format delimited fields terminated by '\t'; #创建部门表
LOAD DATA INPATH '/usr/emp/inputdata/dept.txt' INTO TABLE dept; #加载数据,加载hdfs数据时会将目录数据文件移走到hive目录
4.2将一张表的查询结果插入另一张表
4.4将一张表的查询结果插入文件系统
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format]
SELECT ... FROM ... #语法
INSERT OVERWRITE DIRECTORY '/usr/emp/outputdata'
row format delimited fields terminated by ','
SELECT empno,ename FROM emp; #案列
#生产中一般不用此方式导出数据,一般用sqoop或者spark sql进行数据导出
4.5增删改,可参考官网语法
4.6select 语法
!clear; #清屏
select * from emp where sal>1000;
where = > >= < <=
limit
between and []
(not) in
case when then else # 报表会经常用到此语法,类似java的case语法
select ename, sal,
case
when sal > 1 and sal <=1000 then 'lower'
when sal > 1000 and sal <=2000 then 'middle'
when sal > 2000 and sal <=3000 then 'high'
else 'highest' end
from emp;
扩展5:我们可以通过 hive -e “sql 命令” 来在Linux命令行执行sql,这样我们就可以编写任务脚本了;生产中 是通过 hive -f sql文件 这种方式来编写脚本的。
5.1 聚合函数
max、min、avg、count、sum,这种函数的特点是多进一出,一定会触发MR任务。
扩展6:具体哪些操作会触发MR任务,这个是可以配置等级的。
5.2 其它函数
show functions; #展示所有的函数
desc function trim #显示该函数的使用语法
desc function extended trim #显示该函数的使用用例
select current_date from dual #获取当前时间
... 更多的函数请仔细阅读官网以及样例使用文档。
扩展7:hive sql有些字符需要用“\\”进行转义,列如用“.”切割时,得写成“\\.”