내가 보려고 만든 블로그

<Hive> 하이브 본문

Data Engineering/Hadoop eco ( Hadoop, hive 등등)

<Hive> 하이브

정의김 2022. 10. 11. 21:18

등장 배경:

빅데이터 개념이 등장하면서 일단 데이터를 Data Lake에 던지고 보는 환경이 만들어짐. 이렇게 스키마 없이 저장된 데이터들을 편하게? 가져오기 위해 하이브가 등장하게 됨.

 

1. 하이브의 가장 큰 특징은 메타스토어에 스키마를 정의하고 저장된 데이터에 스키마를 입힐 수 가 있다. 

2. 하이브 테이블에서 쿼리를 통해 데이터를 가져올때 파티션을 안걸면 혼쭐이 나는 경우가 많은데하이브 쿼리에서는 select * from where today ='20221010' 와 같이 컬럼처럼 사용하는 경우가 많지만 실제로 테이블에 컬럼으로 존재하는 것이 아니라 폴더 혹은 디렉토리가 파티션이 된다. 위 사진은 파티션이 today로 지정되있고 today = 20221010 이라는 파티션안에 000000_0 과 000000_0_copy_1 이라는 버킷이 보인다. (파일을 버킷이라고 함 하이브에서) 

 

3. HIVEQL 

sql과 거의 유사하지만 hdfs는 한 번 저장한 파일을 수정할 수 없기 때문에 update, Delete 등 사용이 불가능하며 insert를 할 때에도 덮어쓰기만 가능하다고 한다. 

 

4. External table 과 managed table

External table은 hdfs에 존재하고 있는 파일에 대해 스키마를 입혀 실제 테이블 처럼 사용하는 것이다.( 파일이 생기지 않는다 추가적으로)

반면 , Managed table 은 생성하게 되면 default 설정 기준 hive/warehouse 라는 곳에 테이블이 생성되게 된다.

 

예제) External Table

/temp/test_dir안에 테스트용 데이터를 적재하고 이 데이터를 이용해 external_test라는 테이블 만듬. 

다음과 같이 external_test라는 테이블을 가져올 수있다.

예제) Managed Table

external table에서 hdfs내의 데이터를 그대로 테이블로 사용하던 것과 다르게 managed table은 새로운 테이블들을 생성한다.

1. 테이블 생성

2. 테이블에 간단한 데이터들을 넣어줌 

3. 앞서 말했듯이 저장된 데이터는 /hive/warehouse 경로에 저장됨. 

 

방금은 테이블을 생성하고 insert해서 넣어주었는데 사실 많이 사용되는 방법은 select 문을 이용해서 테이블을 생성하는 거임.

아래가 예시 20221010 데이터를 가져와서 select_test라는 테이블 만듦