Hive HQL 연습
6236 단어 Hive
course.txt
1,
2,
3,
4,
5,
6,
sc.txt
95001,1,81
95001,2,85
95001,3,88
95001,4,70
95002,2,90
95002,3,80
95002,4,71
95002,5,60
95003,1,82
95003,3,90
95003,5,100
95004,1,80
95004,2,92
95004,4,91
95004,5,70
95005,1,70
95005,2,92
95005,3,99
95005,6,87
95006,1,72
95006,2,62
95006,3,100
95006,4,59
95006,5,60
95006,6,98
95007,3,68
95007,4,91
95007,5,94
95007,6,78
95008,1,98
95008,3,89
95008,6,91
95009,2,81
95009,4,89
95009,6,100
95010,2,98
95010,5,90
95010,6,80
95011,1,81
95011,2,91
95011,3,81
95011,4,86
95012,1,81
95012,3,78
95012,4,85
95012,6,98
95013,1,98
95013,2,58
95013,4,88
95013,5,93
95014,1,91
95014,2,100
95014,4,98
95015,1,91
95015,3,59
95015,4,100
95015,6,95
95016,1,92
95016,2,99
95016,4,82
95017,4,82
95017,5,100
95017,6,58
95018,1,95
95018,2,100
95018,3,67
95018,4,78
95019,1,77
95019,2,90
95019,3,91
95019,4,67
95019,5,87
95020,1,66
95020,2,99
95020,5,93
95021,2,93
95021,5,91
95021,6,99
95022,3,69
95022,4,93
95022,5,82
95022,6,100
students.txt
95001, , ,20,CS
95002, , ,19,IS
95003, , ,22,MA
95004, , ,19,IS
95005, , ,18,MA
95006, , ,23,CS
95007, , ,19,MA
95008, , ,18,CS
95009, , ,18,MA
95010, , ,19,CS
95011, , ,18,MA
95012, , ,20,CS
95013, , ,21,CS
95014, , ,19,CS
95015, , ,18,MA
95016, , ,21,MA
95017, , ,18,IS
95018, , ,19,IS
95019, , ,19,IS
95020, , ,21,IS
95021, , ,17,MA
95022, , ,20,MA
아래 문 구 를 사용 하여 표를 만 듭 니 다.
create table student(Sno int,Sname string,Sex string,Sage int,Sdept string)row format delimited fields terminated by ','stored as textfile;
create table course(Cno int,Cname string) row format delimited fields terminated by ',' stored as textfile;
create table sc(Sno int,Cno int,Grade int)row format delimited fields terminated by ',' stored as textfile;
다음 명령 을 사용 하여 데 이 터 를 가 져 옵 니 다:
load data local inpath '/root/sql_learn/students.txt' overwrite into table student;
load data local inpath '/root/sql_learn/sc.txt' overwrite into table sc;
load data local inpath '/root/sql_learn/course.txt' overwrite into table course;
전체 학생 의 학 번 과 성명 을 조회 하 다
select Sno,Sname from student;
선택 과목 을 이수 한 학생 의 성명 을 조회 하 다.
select distinct Sname from student inner join sc on(student.Sno=sc.Sno);
학생 의 총 인원 을 조회 하 다
select count(1) from student;
1 번 과정의 학생 평균 성적 을 계산 하 다.
select avg(Grade) from sc group by Cno having Cno=1;
각 과목 의 성적 평균 점 수 를 조회 하 다.
select Cname,avg(Grade) as average
from course inner join sc on (course.Cno=sc.Cno)
group by course.Cname,sc.Cno;
여기 서 한 가지 방법 을 배 웠 습 니 다. selection 후의 필드 는 group by 에 포함 되 거나 취 합 함 수 를 사용 해 야 합 니 다.
1 번 과정 을 선택 과목 으로 이수 한 학생 의 최고 점 수 를 조회 하 다.
select Grade from sc where Cno=1 order by Grade desc limit 1;
그리고 조사해 보 니 order by 는 하나의 reducer 로 만 임 무 를 완성 할 수 있 고 아래 의 문 구 를 사용 하여 효율 을 높 일 수 있 습 니 다.
select Grade from sc where Cno=1 distribute by Grade sort by Grade desc limit 1;
원 리 는 sort by 에서 그룹 정렬 을 사용 하 는 것 입 니 다.Grade 에 따라 Hash 를 진행 하고 결 과 를 같은 것 을 다른 Reducer 에 넣 습 니 다.
그러나 주의해 야 할 것 은 sort by 로 정렬 하고 mapred. reduce. tasks > 1 을 설정 하면 sort by 는 모든 reducer 의 출력 질서 만 확보 하고 전체 질서 가 보장 되 지 않 습 니 다.sort by 는 orderby 와 다 릅 니 다. Hive. mapred. mode 속성의 영향 을 받 지 않 습 니 다. sort by 의 데 이 터 는 같은 reduce 에 있 는 데 이 터 를 지정 한 필드 에 따라 정렬 할 수 있 습 니 다.sort by 를 사용 하면 실 행 된 reduce 개 수 를 지정 할 수 있 습 니 다 (set mapred. reduce. tasks = n 을 통 해 지정). 출력 된 데 이 터 를 다시 실행 하고 정렬 하면 모든 결 과 를 얻 을 수 있 습 니 다.
Distribute by 와 sort by 의 사용 장면
각 과정 번호 와 해당 하 는 수강 신청 인원 을 구하 다.
select Cno,count(1) from sc group by Cno;
3 개 이상 의 과정 을 선택 과목 으로 이수 한 학생 학 번 을 조회 하 다.
select Sno from sc group by Sno having count(1)>3;
학생 정 보 를 조회 한 결과, 학 번 전체 에 따라 질서 가 있 었 다.
select * from student order by Sno asc;
학생 정 보 를 조회 한 결과 성별 은 연령 에 따라 질서 가 있 었 다.
select * from student order by Sex, Sage asc;
모든 학생 과 그 선택 과목 의 상황 을 조회 하 다.
select student.*,sc.Cno,sc.Grade from student inner join sc on(student.Sno=sc.Sno);
학생 의 득점 상황 을 조회 하 다
select student.Sname,course.Cname,sc.Grade
from student inner join sc on(student.Sno=sc.Sno) inner join course on(course.Cno=sc.Cno);
2 번 과정 을 선택 과목 으로 이수 하고 성적 이 90 점 이상 인 모든 학생 을 조회 합 니 다.
select Sname from student inner join sc on(student.Sno=sc.Sno) where sc.Cno=2;
모든 학생 의 정 보 를 조회 하고 성적표 에 성적 이 있 으 면 성적표 의 과정 번 호 를 출력 한다.
select student.*,Cno from student left outer join sc on(student.Sno=sc.Sno);
- - EFT SEMI JOIN Hive 는 현재 IN / EXISTS 서브 조회 가 이 루어 지지 않 았 으 며, LEFT SEMI JOIN 으로 서브 조회 문 구 를 다시 쓸 수 있 습 니 다.
다시 쓰기
SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key
FROM B);
재 작성 한 SQL 조 회 는 다음 과 같 습 니 다.
select a.key,a.value from a left outer join b on(a.key=b.key) where b.key is not null;
select a.key,a.value from a left semi join b on(a.key=b.key)
같은 학과 에서 공부 하 는 학생
select s2.* from student as s1 inner join student as s2 on(s2.Sdept=s1.Sdept) where s1.Sname=' ';
주의 비교:
select * from student s1 left join student s2 on s1.Sdept=s2.Sdept and s2.Sname=' ';
select * from student s1 right join student s2 on s1.Sdept=s2.Sdept and s2.Sname=' ';
select * from student s1 inner join student s2 on s1.Sdept=s2.Sdept and s2.Sname=' ';
select * from student s1 left semi join student s2 on s1.Sdept=s2.Sdept and s2.Sname=' ';
select s1.Sname from student s1 right semi join student s2 on s1.Sdept=s2.Sdept and s2.Sname=' ';
쓰 고 나 서도 HQL 에 대한 감각 이 좀 생 겼 어 요.잘 했 어.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Hive 통합 ElasticSearch역할: Hive 데이터를 Es에 직접 입력 Index 를 생성합니다 Type의 매핑을 생성합니다 es-hive 관련 Jar 패키지를 다운로드하여 HDFS에 넣습니다 Hive 관련 JAR 패키지 추가 ES 외부 테이블...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.