6

以下のリンクhttp://code.google.com/p/hive-json-serde/wiki/GettingStartedからJSON-SerDeを試しています 。

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

Json-SerDejarを次のように追加しました

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

そして、データを

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

データを正常にロードします。

しかし、データを次のようにクエリする場合

my_tableから*を選択します;

テーブルから1行だけを取得します

data1 100 more data1 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行ではなく1行しか表示されないのはなぜですか。そして /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ファイルの内容はすでに投稿しています。したがって、クエリの結果は1行だけであることがわかります。

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
4

4 に答える 4

2

疑わしい場合に備えて、ログなしで何が起こっているのかを判断するのは少し難しいです(「はじめに」を参照)。ちょっと考えてみてください-それがWITH 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を参照してください。

于 2013-02-05T12:43:41.813 に答える