9.고수준언어_HIVE소개

Hadoop

Hadoop
1 -> HDFS -> stoare
2 -> M.R -> compuatation

데이터사이언티스트 들이 java 나 python을 사용하지않고 빅데이터를 처리할 수 있는 방법을 facebook에서 고민해서 나온 랭기지 HIVE

Hadoop은 대용량데이터 처리에 효율적
모든 작업을 자바로 직접 작성하는것은 다소 장황하며 시간이 오래걸림
모두가 자바를 사용하길바라거나 사용할 줄 아는것은 아님

HIVE

</img>

Facebook 에서 개발한 언어
(비슷한 언어인 Pig 는 Yahho에서 개발)

"ETL"은 python으로 개발이 됨
    - 특징
Unstructred data를 실체형 데이터 처럼 보이도록 함
이 테이블들에 SQL기반의 쿼리를 직접 사용할 수 있음
해당 쿼리에 대한 지정
    - 장점
대용량데이터를 쉽게 처리하기 위한 방안
SQL-based queries를 제공
사용자가 정의한 확장된 인터페이스 제공
Programmability
    - 단점
데이터를 추가하기가 어려움

10. Hive 테이블 다루기

mysql 과 사용 방법은 같다

테이블 생성

</img>

테이블 확인

</img>

테이블_구조_확인

</img>

스키마와 인스턴스

    - 스키마
컬럼과 데이터 구조형 
ex)
name : String
id : Int
    - 인스턴스
실제 값 

기본 문법 사용법은 mysql과 같아서 따로 정리 생략(slect insert delete 등)

Sqoop

</img>

Local 머신에서 Sqoop 커멘드를 이용하여 HDFS로 파일을 올림

방법
1. MySQL 로그인
mysql --user=root --password="설정한 비밀번호"
2. db 확인
show databases
3. 데이터베이스 선택
use "db 명"
4. 테이블 목록 확인
show tables
5. 테이블 HDFS 로 이동

</img>

11. Hive 와 데이터베이스와의 차이점

Apache Hive

HIVEQL은 SQL-Like 언어를 사용
Hadoop 클러스터에서 MapReduce 잡을 생성
Facebook 에서 데이터 웨어하우스를 위해 개발되었음

HIVE 사용 이유

- MapReduce 를 직접 작성하는 것 보다 좀 더 생산적
- 폭 넓은 사용자에게 대용량 데이터를 분석할 수 있는 기회 제공
- 다른 시스템과의 상호 운용성 제겅
Java 나 외부 Script를 통해 확장 가능

</img>

    - 위 사진의 metastore
Hive의 메타 정보를 가지고 있음
sql 질의문이 오면 metastore를 통해 확인 후 쿼리를 날리는 구조

차이점

</img>

SQL은 single 머신에서 오랫동안 개발된 언어이기 때문에 더 성능이 좋음
HIVE는 데이터 사이즈가 크다는것 빼고는 sql에비해 열악한 구조를 가지고 있음

테이블 hadoop 으로 업로드

</img>

12. 기존 데이터베이스를 Hive에서 활용

Hive의 기본 명령어

</img>

추가 예시
# 모든 필드 보기 * 상위 5개만 출력 LIMIT 5  
SELECT * FROM orders LIMIT 5;

HIVE로 해당 db를 가져오기

</img>

mysql 명령어와 join 명령어등 많이 필요

13. Hive에서의 join사용법 및 예제

Hive 에서의 Join

  1. Inner Joins
  2. Outer Joins
  3. Cross joins
  4. Left semi joins

    사용 예시 SELECT ~~ FROM ~~ JOIN ~~ ON ( ~~ = ~~)

  1. Inner joins

</img>

두 테이블 에서 cust_id 가 같은 내용을 기반으로 조인을 함
select 를 기반으로 a가 2번 매칭됨으로 2개를  출력
매칭이 안되는 경우넨 출력을 하지 않는다 (custermers table의 d의 경우 매칭되는 경우가 없어어 출력하지 않음)
  1. LEFT Outer Joins

</img>

inner join과 같으나 매칭된 데이터가 없는경우 나머지 값을 NULL값으로 매칭시킴 
반대로 right outer joins 라면 orders의 데이터를 살리고 customers의 데이터가 NULL로 출력이 됨 
  1. full outer join

</img>

left rigt 조인을 합친 것 
양 쪽 테이블의 빈 내용을 모두 출력

outer join 아래에 쿼리문을 추가 가능 
  1. cross join

</img>

모든 경우의 수를 모두 조합시켜서 join