hive之生产环境常用sql语法

 

目录

1 hive配置参数查询以及修改

2 生产常用基本字段类型

3 DDL语法

4 DML语法

5 hive自带函数详解


1 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)的方式然修改后,最终改回去,不影响别人使用。

2 生产常用基本字段类型

数值类型: int、bigint、float、double、DECIMAL
字符串:string
布尔类型:true、false  #生产用1/0代替
时间类型:date、TIMESTAMP 等  #生产用字符串代替,如:19010101010101

3 DDL语法

进入官网可查询最新的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数据目录,而外部表不会,其次外部表删除时只会删除元数据,不会删除数据

4 DML语法

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 hive自带函数详解

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有些字符需要用“\\”进行转义,列如用“.”切割时,得写成“\\.”

 

猜你喜欢

转载自blog.csdn.net/qq_32641659/article/details/88393143