hive的DDL,DML总结

版权声明:1911907658 https://blog.csdn.net/qq_33598343/article/details/84141003

1.DDL数据定义

1)创建数据库
-》查看数据库
desc database mydb;
-》创建数据库
create database mydb;
-》创建数据库的标准写法
create database if not exists mydb;
-》创建数据库指定所在的hdfs路径
create databases mydb location ‘/hive_db’;

2)修改数据库
-》查看数据库结构
desc databases mydb;
-》添加描述信息
alter database mydb set dbproperties(“this is my hive db”);
-》查看拓展属性(刚刚添加的描述信息)
desc databases extended mydb;

3)查询数据库
-》显示数据库
show databases;
-》筛选查询的数据库
show databases like ‘my*’;

4)删除数据库
-》删除数据库
drop database mydb;
-》删除数据库的标准写法
drop database if exist mydb;

5)创建表
-》create table mydb(id int,gz double,bmbh string)
row format //行格式化
delimited fields
terminated by ‘\t’; //按’\t’分割
6)管理表(内部表)
不擅长数据共享
删除Hive中管理表,数据删除

-》加载数据
load data local inpath ‘/root/emp.txt’ into table emp;

-》查询并保存到一张新的表
create table if not exist emp2 as select * from emp where name = ‘ycf’;

-》查询表结构
desc formatted emp;

7)创建外部表
-》创建外部表
create external table if not exist emp(id int,name string,gz double.bmbh int);
row format
delimited fields
terminated by ‘\t’;
外部表删除后,hdfs上还存在,此时创建一个字段信息表名一样的管理表,会自动恢复,但是的hdfs对应的表同样也为管理表,删除就没了,但如果创建了一个相同表信息的外部表来恢复信息,表还是外部表。
-》导入数据
load data local inpath ‘/root/emp.txt’ into table emp;

-》查看表结构
desc formatted emp;

-》删除表
drop table emp;

8)分区表
-》创建分区表
create table emp(id int,name string,gz double.bmbh int)
partitioned by(day string)
row format
delimited fields
terminated by ‘\t’;
-》加载数据
load data local inpath ‘/root/emp.txt’ into table emp;
此时因为创建了分区表,不能这样直接加载数据进去
load data local inpath ‘/root/emp,txt’ into table partition(day=‘1122’);

-》添加分区
alter table emp add partition(day=‘1333’);
此时就一个空的分区

-》单分区查询
select * from emp where day = ‘1122’;

-》全查询
select *from emp;

-》查询表结构
desc formatted emp;

-》删除单个分区
alter table emp drop partition(day=‘1333’);

9)修改表
-》修改表名
alter table emp rename to new_emp;
-》添加列
alter table emp add columns(desc string);
-》更新列
alter table emp change column desc descc int;
-》替换
alter table emp replace columns(desccc int);

2.DML数据操作

1)向表中加载数据
load data local inpath ‘/root/emp.txt’ into table emp;
2)加载hdfs中的数据
load data inpath ‘/emp/emp.txt’ into table emp;
在hdfs中加载数据相当于剪贴,因为,Hive的数据也在hdfs中
3)覆盖原有的数据
load data inpath ‘/emp/emp.txt’ overwrite into table emp;
加overwrite是加载后会覆盖原来的内容

4)创建分区表
create table emp(id int,name string,gz double.bmbh int)
partitioned by(day=‘string’)
row format
delimited fields
terminated by ‘\t’;

5)向分区表插入数据
insert into table emp partition(day=‘112’) values(1,‘xiaoming’,1700.00,30);

6)按照条件查询结构存储到新表
create table if not exist new_mydb as select *from emp where name = ‘xaa’;

7)创建表时加载数据
create table newdemo(id int,name string,gz double.bmbh int)
row format
delimited fields
terminated by ‘\t’
location ‘/hdfs下的目录’;

不过后期用Sqoop就可以进行数据迁移
8)查询结果导出到本地的三种方式

inset overwrite local directory ‘/root/newdata.txt’ select * from emp where name= ‘mma’;

bin/hive -e ‘select * from emp’ > /root/newdata.txt;

直接去存放表的目录下载
hdfs dfs -get /uer/hive/warehouse/00000 /root;

查询

1)配置查询头信息
在hive-site.xml

<property>  
     <name>hive.cli.print.header</name> 
 <value>true</value> 
    </property> 
 
    <property>                                                           
           <name>hive.cli.print.current.db</name> 
   <value>true</value> 
     </property> 

2)基本查询

-》全表查询
select * from emp;
-》查询指定列
select id,name from emp;

3)算数运算符

描述 
+ 		相加 
­ 		相减 
* 		相乘 
/ 		相除 
% 		取余 
& 		按位取与 
		按位取或
^ 		异或 
~ 		按位取反

-》函数
(1)求行数count
select count(*) from empt;
(2)求最大值max
select max(empt.sal) sal_max from empt;
(3)求最小值
select min(empt.sal) sal_min from empt;
(4)求总和
select sum(empt.sal) sal_sum from empt;
(5)求平均值
select avg(empt.sal) sal_avg from empt;
(6)前两条
select * from empt limit 2;

-》where语句
(1)工资大于1700的员工信息
select * from empt where empt.sal > 1700;
(2)工资小于1800的员工信息

select * from empt where empt.sal < 1800;
(3)查询工资在1500到1800区间的员工信息
select * from empt where empt.sal between 1500 and 1800;
(4)查询有奖金的员工信息
select *from empt where empt.comm is not null;
(5)查询无奖金的员工信息
select * from empt where empt.comm is null;
(6)查询工资是1700和1900的员工信息
select * from empt where empt.sal in(1700,1900);

-》Like

使用like运算选择类似的值
选择条件可以包含字母和数字
(1)查找员工薪水第二位为6的员工信息
select * from empt where empt.sal like ‘_6%’;
_代表一个字符
%代表0个或多个字符

(2)查找员工薪水中包含7的员工信息
select * from empt where empt.sal like ‘%7%’;

-》rlike
select * from empt where empt.sal rlike ‘[7]’;

-》分组

(1)Group By语句
计算empt表每个部门的平均工资
select avg(empt.sal) avg_sal,deptno from empt group by deptno;select
avg(empt.sal) avg_sal,deptno from empt group by deptno;
(2)计算empt每个部门中最高的薪水
select max(empt.sal) max_sal,deptno from empt group by deptno;
(3)求部门平均薪水大于1700的部门
select deptno,avg(sal) avg_sal from empt group by deptno having avg_sal>1
700;
注意:having只用于group by分组统计语句

猜你喜欢

转载自blog.csdn.net/qq_33598343/article/details/84141003