Verwendung von JSON-SerDe in Hive-Tabellen

Ich versuche es mit JSON-SerDe unter folgendem Linkhttp://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' ;

Ich habe Json-SerDe jar als hinzugefügt

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

Und geladene Daten als

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

und es lädt Daten erfolgreich.

Aber bei der Abfrage von Daten als

Wählen Sie * aus my_table;

Ich bekomme nur eine Zeile vom Tisch als

data1 100 weitere data1 123.001

Test.json enthält

{"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}

Wo ist das Problem? Warum kommt nur eine Zeile anstelle von 4 Zeilen, wenn ich die Tabelle abfrage. Und in/ user / hive / warehouse / my_tableenthält alle 4 Zeilen !!

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

Ich habe den Inhalt der Datei test.json bereits gepostet. Sie können also sehen, dass die Abfrage nur eine Zeile als ergibt

data1   100     more data1      123.001

Ich habe die json-Datei in employee.json geändert, die enthält

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

und geänderte Tabelle auch, aber es zeigt einen Nullwert an, wenn ich die Tabelle abfrage

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage