Demonstração de operação do Hive
Sob usr, mkdir / wang
hadoop fs -mkdir /upload
hadoop fs -chmod g+w /upload
upload de dados
[root@master wang]# hadoop fs -put emp.csv /upload
[root@master wang]# hadoop fs -put dept.csv /upload
Servidor: hiveserver2 &
Cliente:
Entrar com anônimo
beeline -u jdbc: hive2: // master: 10000 / default
**** Faça login como root, nós faremos login como usuário root, caso contrário, não há permissão para escrever
beeline -u jdbc: hive2: // master: 10000 / default -n root
Crie uma tabela de funcionários, use a instrução que cria uma tabela para especificar o separador de arquivo de entrada e, em seguida, carregue os dados para esta tabela
create table emp001(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int,deptno int) row format delimited fields terminated by ','; # 字段分割用逗号
Criar tabela de departamento
create table dept001(deptno int,dname string,loc string) row format delimited fields terminated by ',';
Importar dados
load data inpath '/upload/emp.csv' into table emp001;
load data inpath '/upload/dept.csv' into table dept001;
Crie partições com base no número do departamento do funcionário
create table emp_part001(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int) partitioned by (deptno int) row format delimited fields terminated by ',';
Insira dados na tabela de partição: especifique a partição dos dados importados (importe os dados por meio de uma subconsulta)
insert into table emp_part001 partition(deptno=10) select empno,ename,job,mgr,hiredate,sal,comm from emp001 where deptno=10;
insert into table emp_part001 partition(deptno=20) select empno,ename,job,mgr,hiredate,sal,comm from emp001 where deptno=20;
insert into table emp_part001 partition(deptno=30) select empno,ename,job,mgr,hiredate,sal,comm from emp001 where deptno=30;
Crie uma tabela de balde e divida os baldes de acordo com o trabalho do funcionário (trabalho)
create table emp_bucket001 (empno int,ename string,job string,mgr int,hiredate string,sal int,comm int,deptno int) clustered by (job) into 4 buckets row format delimited fields terminated by ',';
Insira dados por meio de subconsulta
insert into emp_bucket001 select * from emp001;
Consultar informações do funcionário: número do funcionário, nome, salário
select empno,ename,sal from emp001;
Consulta de junção de várias tabelas
select dept001.dname,emp001.ename from emp001,dept001 where emp001.deptno=dept001.deptno;
Número de empregados
select count(empno) as emp_num from emp001;
Remova os valores duplicados
select distinct deptno from emp001;
Consultar quantos cargos a empresa possui
select count(distinct job) from emp001;
Conte o número total de funcionários que estavam empregados em 1981
select count(hiredate) as result from emp001 where hiredate like '%1981%';
Estatísticas do salário total de cada departamento
select deptno,sum(sal) from emp001 group by deptno;
Conte quantos funcionários estão em cada posição
select job, count(*) as emp_num from emp001 group by job order by emp_num asc;
Consulte o primeiro funcionário
select ename,hiredate from emp001
join
(select min(hiredate) as min_hiredate from emp001) t1
where hiredate=t1.min_hiredate;
Julgando o nível salarial
select ename,empno,sal,
case when sal<2000 then 'low' when sal >=2000
and sal <3000 then 'middle'
else 'high'
end as level
from emp001
order by sal desc;
Dê aos funcionários um aumento de salário de acordo com o cargo e exiba o salário antes e depois do aumento
select empno,ename,job,sal,
case job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end
from emp001;
Estatísticas das regiões com maior número de funcionários no primeiro semestre do ano
# cast用于转换数据类型
# substr用于截取字符串
select t1.loc,count(*)as emp_count
from
(select dept001.loc,emp001.ename,
cast(substr(emp001.hiredate,6,2) as int) as hire_month
from dept001 join emp001
on dept001.deptno=emp001.deptno) t1
where t1.hire_month<=6
group by t1.loc
order by emp_count desc
limit 1;