json 데이터를 저장할 hive 테이블을 생성하는 예시이다. 

CREATE TABLE if not exists member


   name STRING,

   id INT, 

   props STRUCT <




) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'


json 데이터를 hive에 저장할 때 개행 문자가 있으면 에러가 발생한다. 

$ cat "test.json"




  "props": {





다음 에러로 발생한다. 

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}' at 2 [character 3 line 1]

따라서 개행 문자 없이 사용해야 한다. 

$ cat "test.json"

{  "name":"samuel",  "id":1,  "props":{    "departname":"none",    "alias":"kim"  }}

이제 하둡에 json 파일을 업로드한다.

$ hadoop fs -put test.json /lib/test.json

hive 실행을 실행해서 데이터를 읽게 한다.

hive> LOAD DATA INPATH '/lib/test.json' OVERWRITE INTO TABLE member;

hive> select * from member;


samuel 1 {"departname":"none","alias":"kim"}

Time taken: 0.614 seconds, Fetched: 1 row(s)

SELECT props.alias FROM member WHERE props.departname="none";


Posted by 김용환 '김용환'