본문으로 바로가기

[hive] Schema on Read의 이해

category Data 엔지니어링/Big Data 처리 2017. 12. 14. 00:41

| Schema on Read 란?

오늘은 Hive의 가장 중요한 속성인 Schema on Read에 대해 이해해 보자

Schema on Read는 쉽게 말해  데이터의 Schema 확인을 Data를 읽는 시점에서 한다는 뜻이다. 
반대 용어로는 Schema on Write 가 있다.


Schema on Read의 예를 들어보자

Oracle이나 Mysql에 데이터를 insert 할 경우 만약 데이터의 형태가 미리 정의한 Table의 속성과 다르다면 Error을 뱉어내게 된다.

Data Type, Column 개수 등이 그에 해당 한다.

때문에 내가 넣고자 하는 데이터의 형태가 잘못 되었을 경우 미리 인지할 수 있다.


그러나 Hive는 데이터를 Insert 하는  읽는 시점에서는 체크하지 않고, 읽을 때 테이블의 속성대로만 데이터를 읽게 된다. 

또 테이블의 정의가 없이도 데이터를 일단 올려 놓고 추후에 테이블을 정의할 수도 있다. 따라서 정의한 테이블 형태와 다르게 데이터를 Insert 한다 하더라도 Hive 입장에서는 Error가 아니며 단순히 정의된 형태 대로 Table을 읽기만 하면 된다. 

어찌보면 이 구조가 상당히 비합리적인것 아닐까 라고 생각할수 있다. 

그러나 데이터의 형태가 빈번하게 바뀌는 빅데이터 상황을 고려한다면 오히려 장점이 될 수 있다.

혹시 Oracle에서 대용량 테이블의 컬럼을 추가하거나 삭제하는 작업을 해본 사람이라면 알겠지만, 수억건이 넘어가는 Table에 컬럼을 조작할 경우 상당히 오랜 시간이 소요되는 것은 물론 해당 작업이 일어날 때 Data 질의가 불가능 하거나 탐색 속도에 엄청난 영향 받을 수 밖에 없다. 

하지만 Hive는 컬럼 추가나 삭제가 데이터 자체의 변화 없이 Schema만 조작하고 해당 Schema를 기준으로 데이터를 읽기만 하면 되기 때문에 Schema 변경 역시 부담없이 처리할 수 있다.

출처: https://www.oreilly.com/learning/hadoop-what-you-need-to-know

위 그림은 데이터 수집부터 분석의 단계를 표시한 것으로써, Schema 생성과 Data 적재 시점의 차이를 보여주는 그림이다. 


장점과 단점 _ 출처 : Cloudera


결론적으로 기억해야 할 것은 Hive는 Schema on Read 속성을 갖고 있기 때문에 Table Schema를 잘 생성해야 데이터를 의도에 맞게 Read할 수 있다는 점이다.

뒤집어 말하면, 자신이 Select한 테이블의 실제 물리적인 데이터는 Hive Table형태와 반드시 일치하지 않을 수 있다는 점을 이해해야 한다.


공감 버튼이 큰 힘이 됩니다.



댓글을 달아 주세요

  1. BlogIcon 서기리보이 2019.01.17 17:41 신고

    하둡 공부를 하다가 schema-on-read/write 라는 키워드가 나와서 무슨 이야긴지 잘 모르고 있었는데, 깔끔하게 정리해주셨네요. 감사합니다.