Hive 텍스트파일 인코딩
Hive 텍스트파일 인코딩
· Version : Hive
텍스트 데이터의 필드를 구분할때, 탭(TAB) 또는 콤마(,)를 많이 사용한다. 이러한 일반적인 구분 기호는 데이터안에 콤마나 탭이 포함되어 있을 경우 전체 데이터 필드가 맞지 않는문제가 발생할 수 있어 주의해야 한다. 하이브도 탭 또는 콤마 같은 필드 구분자를 지원하지만 앞에서 말한 이유 때문에 일반적으로 잘 사용하지 않는 여러 제어 문자를 기본 구분 기호로 사용한다. 아래표는 하이브에서 제공하는 구분기호이다. 만약 필드에서 탭으로 분리하려면 ‘\t’를 사용하고, 콤마의 경우 ‘,’를 사용한다.
구분기호 |
설명 |
\n |
레코드 줄 바꿈 |
^A |
모든 컬럼을 분리한다. CREATE TABLE 문에서 명시적으로 지정할때는 8진수 코드 ‘\001’을 사용한다. |
^B |
ARRAY, STRUCT, MAP의 Key-Value 요소를 분리한다. CREATE TABLE 문에서 명시적으로 지정할때는 8진수 코드 ‘\002’를 사용한다. |
^C |
MAP의 Key-Value 에서 키를 관련된 값과 분리한다. CREATE TABLE 문에서 명시적으로 지정할때는 8진수 코드 ‘\003’을 사용한다. |
CREATE TABLE HIVE_TABLE ( COL1 STRING, COL2 FLOAT, COL3 ARRAY<STRING>, COL4 MAP<STRING, FLOAT>, COL5 STRUCT<C_1:STRING, C_2:STRING, C_3:STRING, C_4:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE; |
일반적으로 데이터베이스는 스키마 구조를 가지고 있으며, 데이터를 입력할때 스키마 구조에 맞춰서 입력한다. 이것을 ‘schema on write’라고 부른다. 하지만 하이브는 저장소에 대해 이런 쓰기 제어 구조를 가지고 있지 않으며 데이터를 읽을때 스키마를 적용한다. 이것을 ‘schema on read’라고 한다. 그래서 스키마와 파일의 내용이 일치하지 않으면 하이브는 그 값을 모두 null로 채운다. 만약 숫자 필드가 정의되어있는데 문자열을 만나면 하이브는 null을 반환한다.
2020-06-11 / Sungwook Kang / http://sungwookkang.com
Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 텍스트파일 인코딩, 필드 구분, 문자열 구분