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

CREATE TABLE if not exists member

(

   name STRING,

   id INT, 

   props STRUCT <

       departname:STRING,

       alias:STRING

   >

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

STORED AS TEXTFILE





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


$ cat "test.json"

{

  "name":"samuel",

  "id":1,

  "props": {

    "departname":"none",

    "alias":"kim"

  }

}


다음 에러로 발생한다. 

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;

OK

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

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


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

kim



Posted by 김용환 '김용환'