hive插⼊多条数据sql_Hive的SQL操作
1、分区表
1)创建分区表
hive> create table dept_partitions()
> partition by()
> row format
> delimited fields
> terminated by '';
例:
hive> create table dept_partitions(deptno int, dept string, loc string)
> partitioned by(day string)
> row format
> delimited fields
> terminated by '\t';
hive> load data local inpath '/' into table dept_partitions
> partition(day='0228');
2)查询
全查询
hive> select * from dept_partitions;
注意:此时查看的是整个分区表中的数据
单分区查询
hive> select * from dept_partitions where day = ‘0228’;
注意:此时查看的是指定分区中的数据
联合查询
hive> select * from dept_partitions where day = ‘0228’ union select * from dept_partitions where day = ‘0302’;添加单个分区
hive> alter table dept_partitions add partition(day = ‘0303’);
注意:如果想⼀次添加多个的话 空格分割即可
hive> alter table dept_partitions add partition(day = ‘0304’) partition(day = ‘0305’);
查看分区
hive> show partitions dept_partitions;
删除分区
hive> alter table dept_partitions drop partition(day=’0305’);
分区表在hdfs中分⽬录⽂件夹
hive> dfs -mkdir -p /user/hive/warehouse/dept_partitions/day=0305;
hive> dfs -put / /user/hive/warehouse/dept_partitions/day=0305;
hive> show partitions dept_partitions;
此时并没有day=0305,需要进⾏下⾯操作
导⼊数据
相当于修复数据:msck repair table dept_partitions;
2、DML数据操作
1)数据的导⼊
hive> load data [local] inpath ” into table ;
2)向表中插⼊数据
hive> insert into table student_partitions partition(age = 20) values(1,’re’);
向表中插⼊sql查询结果数据
hive> insert overwrite table student_partitions partition(age = 20) select * from hsiehchou where id<3; create⽅式:
hive> create table if not exists student_partitions1 as select * from student_partitions where id = 2; 3)创建表直接加载数据
hive> create table student_partitions3(id int,name string)
> row format
> delimited fields
> terminated by '\t'
> location '';
注意:locatition路径是hdfs路径
关联⽂件时不能有多级⽬录!!!
sql left join 多表连接例:
hive> create table student_partitions4(id int,name string)
> row format
> delimited fields
> terminated by '\t'
> location '/wc';
4)把操作结果导出到本地linux
hive> insert overwrite local directory ‘/root/data’ select * from hsiehchou;
5)把hive中表数据导出到hdfs中
hive> export table hsiehchou to ‘/hsiehchou’;
把hdfs数据导⼊到hive中
hive> import table hsiehchou3 from ‘/hsiehchou/’;
6)清空表数据
hive> truncate table hsiehchou3;
3、查询操作
基础查询
select * from table;全表查询
hive> select hsiehchou.id,hsiehchou.name from table …;指定列
1)指定列查询
hive> select hsiehchou.name from hsiehchou;
2)指定列查询设置别名
hive> select hsiehchou.name as myname from hsiehchou;
3)创建员⼯表
hive> create table ptable(empno int, ename string , job string,mgr int, birthday string, sal double, comm double, deptno int)
> row format
> delimited fields
> terminated by '\t';
hive> load data local ‘/’ into table ptable;
4)查询员⼯姓名和⼯资(每个员⼯加薪1000块)
hive> ame,emptable.sal+1000 salmoney from emptable;
5)查看公司有多少员⼯
hive> select count(1) empnumber from emptable;
6)查询⼯资最⾼的⼯资
hive> select max(sal) numberone from emptable;
7)查询⼯资最⼩的⼯资
hive> select min(sal) from emptable;
8)求⼯资的总和
hive> select sum(sal) sal_sum from emptable;
9)求该公司员⼯⼯资的平均值
hive> select avg(sal) sal_avg from emptable;
10)查询结果只显⽰前多少条
hive> select * from emptable limit 4;
11)where语句
作⽤:过滤
使⽤:where⼦句紧接着from
求出⼯资⼤于2600的员⼯
hive> select * from emptable where sal>2600;
求出⼯资在1000~2500范围的员⼯
hive> select * from emptable where sal>1000 and sal<2500;
或者
hive> select * from emptable where sal between 1000 and 2500;查询⼯资在2000和3000这两个数的员⼯信息
hive> select ename from emptable where sal in(2000,3000); 12)is null与is not null
空与⾮空的过滤
hive> select * from emptable where comm is null;
⾮空
hive> select * from emptable where comm is not null;
13)like
模糊查询
使⽤:
通配符% 后⾯零个或者多个字符
_代表⼀个字符
查询⼯资以1开头的员⼯信息
hive> select * from emptable where sal like ‘1%’;
查询⼯资地第⼆位是1的员⼯信息
hive> select * from emptable where sal like ‘_1%’;
_代表⼀个字符
查询⼯资中有5的员⼯信息
hive> select * from emptable where sal like ‘%5%’;
14)And/Not/Or
查询部门号30并且⼯资⼤于1000的员⼯信息
hive> select * from emptable where sal>1000 and deptno=30;
查询部门号30或者⼯资⼤于1000的员⼯信息
hive> select * from emptable where sal>1000 or deptno=30;
查询⼯资在2000和3000这两个数的员⼯信息
hive> select * from emptable where sal in(2000,3000);
查询⼯资不在2000和3000这两个数的员⼯信息
hive> select * from emptable where sal not in(2000,3000);
15)分组操作
Group By语句
通常和⼀些聚合函数⼀起使⽤
求每个部门的平均⼯资
hive> select avg(sal) avg_sal,deptno from emptable group by deptno;
having
where:后不可以与分组函数,⽽having可以
求每个部门的平均⼯资⼤于2000的部门
hive> select deptno,avg(sal) avg_sal from emptable group by deptno hav
ing avg_sal>2000;
4、Join操作
hive> create table dept(deptno int, dname string, loc int)
> row format
> delimited fields
> terminated by '\t';
员⼯表中只有部门编号,并没有部门名称
部门表中有部门标号和部门名称
等值join
1)查询员⼯编号、员⼯姓名、员⼯所在的部门名称
hive> ame,dept.dname from emptable join dept on emptable.deptno=dept.deptno;
2)查询员⼯编号、员⼯姓名、员⼯所在部门名称、部门所在地
内连接:只有连接的两张表中都存在与条件向匹配的数据才会被保留下来
hive> ame,d.dname,d.loc from emptable e join dept d on e.deptno=d.deptno;
3)左外连接(left join)
查询员⼯编号,员⼯姓名,部门名称
hive> ame,d.deptname from emptable e left join dept
d on e.deptno=d.deptno;
特点:默认⽤的Left join 可以省略left
保留左表数据,右表没有join上 显⽰为null
4)右外连接(right join)
hive> ame,d.dname from emptable e right join dept d
on e.deptno=d.deptno;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。