복붙노트

[HADOOP] 하이브 테이블에서 JSON-SerDe 사용하기

HADOOP

하이브 테이블에서 JSON-SerDe 사용하기

아래 링크에서 JSON-SerDe를 시도하고있다. http://code.google.com/p/hive-json-serde/wiki/GettingStarted.

         CREATE TABLE my_table (field1 string, field2 int, 
                                     field3 string, field4 double)
         ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde' ;

Json-SerDe jar를 다음과 같이 추가했습니다.

          ADD JAR /path-to/hive-json-serde.jar;

그리고 데이터로드 :

LOAD DATA LOCAL INPATH  '/home/hduser/pradi/Test.json' INTO TABLE my_table;

데이터를 성공적으로로드합니다.

그러나 쿼리 데이터가

my_table에서 * 선택하십시오.

나는 테이블에서 단 하나의 행을 얻는다.

데이터 1 100 추가 데이터 1 123.001

Test.json에 포함됨

{"field1":"data1","field2":100,"field3":"more data1","field4":123.001} 

{"field1":"data2","field2":200,"field3":"more data2","field4":123.002} 

{"field1":"data3","field2":300,"field3":"more data3","field4":123.003} 

{"field1":"data4","field2":400,"field3":"more data4","field4":123.004}

문제가 어디에 있습니까? 왜 내가 테이블을 쿼리 할 때 단 한 행이 4 행 대신오고있다. 그리고 / user / hive / warehouse / my_table에는 4 줄이 모두 들어 있습니다 !!

hive> add jar /home/hduser/pradeep/hive-json-serde-0.2.jar;
Added /home/hduser/pradeep/hive-json-serde-0.2.jar to class path
Added resource: /home/hduser/pradeep/hive-json-serde-0.2.jar

hive> CREATE EXTERNAL TABLE my_table (field1 string, field2 int,
>                                 field3 string, field4 double)
> ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde'
> WITH SERDEPROPERTIES (
>   "field1"="$.field1",
>   "field2"="$.field2",
>   "field3"="$.field3",
>   "field4"="$.field4"
> );
OK
Time taken: 0.088 seconds

hive> LOAD DATA LOCAL INPATH  '/home/hduser/pradi/test.json' INTO TABLE my_table;
Copying data from file:/home/hduser/pradi/test.json
Copying file: file:/home/hduser/pradi/test.json
Loading data to table default.my_table
OK
Time taken: 0.426 seconds

hive> select * from my_table;
OK
data1   100     more data1      123.001
Time taken: 0.17 seconds

나는 이미 test.json 파일의 내용을 게시했다. 그래서 당신은 질의가 단 한 줄의 결과로 나타나는 것을 볼 수 있습니다.

data1   100     more data1      123.001

json 파일을 employee.json으로 변경했습니다.

{       "firstName": "Mike",       "lastName": "Chepesky",       "employeeNumber": 1840192 }

및 또한 테이블을 변경하면 그것은 테이블을 쿼리하면 null 값을 보여주는 변경된 테이블

hive> add jar /home/hduser/pradi/hive-json-serde-0.2.jar;
Added /home/hduser/pradi/hive-json-serde-0.2.jar to class path
Added resource: /home/hduser/pradi/hive-json-serde-0.2.jar

hive> create EXTERNAL table employees_json (firstName string, lastName string,        employeeNumber int )
> ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde';
OK
Time taken: 0.297 seconds


hive> load data local inpath '/home/hduser/pradi/employees.json' into table     employees_json;
Copying data from file:/home/hduser/pradi/employees.json
Copying file: file:/home/hduser/pradi/employees.json
Loading data to table default.employees_json
OK
Time taken: 0.293 seconds


 hive>select * from employees_json;
  OK
  NULL    NULL    NULL
  NULL    NULL    NULL
  NULL    NULL    NULL
  NULL    NULL    NULL
  NULL    NULL    NULL
  NULL    NULL    NULL
Time taken: 0.194 seconds

해결법

  1. ==============================

    1.의심스러운 경우 로그없이 진행되는 상황을 알기가 약간 어렵습니다 (시작하기 참조). 잠깐 생각해보십시오. SERDEPROPERTIES와 (과) 함께 작동하면 시도해 볼 수 있습니까?

    의심스러운 경우 로그없이 진행되는 상황을 알기가 약간 어렵습니다 (시작하기 참조). 잠깐 생각해보십시오. SERDEPROPERTIES와 (과) 함께 작동하면 시도해 볼 수 있습니까?

    CREATE EXTERNAL TABLE my_table (field1 string, field2 int, 
                                    field3 string, field4 double)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde'
    WITH SERDEPROPERTIES (
      "field1"="$.field1",
      "field2"="$.field2",
      "field3"="$.field3",
      "field4"="$.field4" 
    );
    

    ThinkBigAnalytics에서 시도해 볼 수있는 포크도 있습니다.

    업데이트 : Test.json의 입력이 잘못된 JSON이므로 레코드가 축소됩니다.

    자세한 내용은 https://stackoverflow.com/a/11707993/396567 응답을 참조하십시오.

  2. ==============================

    2.내 시험

    내 시험

  3. ==============================

    3.json 구문 분석 용 cwiki / confluence를 기반으로 우리는 몇 가지 단계를 따라야합니다.

    json 구문 분석 용 cwiki / confluence를 기반으로 우리는 몇 가지 단계를 따라야합니다.

  4. from https://stackoverflow.com/questions/14705858/using-json-serde-in-hive-tables by cc-by-sa and MIT license