à l'aide de JSON-SerDe dans la Ruche tables
Je suis en train de JSON-SerDe lien ci-dessous
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' ;
J'ai ajouté Json-SerDe bocal comme
ADD JAR /path-to/hive-json-serde.jar;
Et chargé de données comme
LOAD DATA LOCAL INPATH '/home/hduser/pradi/Test.json' INTO TABLE my_table;
et il charge les données avec succès.
Mais quand les données de la requête comme
Select * from ma_table;
- Je obtenir une seule ligne de la table comme
data1 100 plus data1 123.001
Test.json contient
{"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}
Où est le problème? pourquoi une seule ligne est à venir, au lieu de 4 lignes quand j'ai une requête à la table. Et dans /user/ruche/entrepôt/ma_table contient toutes les 4 lignes!!
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
J'ai déjà posté sur le contenu du test.fichier json. donc vous pouvez voir que la requête est seulement la résultante d'une ligne comme
data1 100 more data1 123.001
J'ai modifié le fichier json à l'employé.json qui contient
{
"firstName" : "Mike",
"lastName" : "Chepesky",
"employeeNumber" : 1840192
}
et changé de table aussi, mais il en montrant une des valeurs null lorsque j'ai une requête à la table
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
OriginalL'auteur prad | 2013-02-05
Vous devez vous connecter pour publier un commentaire.
Un peu difficile de dire ce qui se passe sans que les journaux (voir Prise En Main) en cas de doute. Juste une pensée rapide - pouvez-vous essayer si ça fonctionne avec
WITH SERDEPROPERTIES
de la manière suivante:Il y a aussi un fourche vous pourriez vouloir donner un essai à partir de ThinkBigAnalytics.
Mise à JOUR: active ou désactive l'entrée dans l'Essai.json est invalid JSON donc les documents de effondré.
Voir la réponse https://stackoverflow.com/a/11707993/396567 pour plus de détails.
Et, juste pour être sûr, vous avez CRÉER EXTERNE, droit?
ouais même chose que u ai écrit ci-dessus. Mais quelle est la différence dans Create table et Create table externe? Et aussi quand je baisse ce tableau(CRÉER EXTERNE), il n'est pas supprimé de HDFS.
Des moyens EXTERNES de la Ruche ne possède pas les données, mais les métadonnées de la table est supprimée sur la CHUTE. Pouvez-vous mettre à jour votre post avec la sortie complète de votre requête pls?
OMG, je me concentre tellement sur la Ruche pour seulement maintenant à la figure que votre entrée n'est pas valide. Ne peut pas répéter les clés en JSON et c'est pourquoi il int phase de chargement de la dossiers sont effondrés. Vérifiez auprès de linters de comme jsonlint.com d'abord pour s'assurer qu'il est valide JSON.
OriginalL'auteur Michael Hausenblas
Tout d'abord, vous devez valider votre fichier json sur http://jsonlint.com/
après que faire de votre fichier une ligne par ligne et retirer le [ ]. la virgule à la fin de la ligne est obligatoire.
[{"champ1":"data1","champ2":100,"field3":"plus data1","field4":123.001},
{"champ1":"2","champ2":200,"field3":"plus data2","field4":123.002},
{"champ1":"data3","champ2":300,"field3":"plus data3","field4":123.003},
{"champ1":"data4","champ2":400,"field3":"plus data4","field4":123.004}]
Dans mon test, j'ai ajouté hive-json-serde-0.2.jar à partir de cluster hadoop , je pense hive-json-serde-0.1.jar devrait être ok.
ADD JAR hive-json-serde-0.2.jar;
Créer votre table
CREATE TABLE ma_table (champ1 chaîne, champ2 int, champ3 chaîne, field4 double)
FORMAT de LIGNE SERDE 'org.apache.hadoop.de la ruche.contrib.serde2.JsonSerde' ;
Charger votre fichier de données Json ,ici, je le charger à partir de cluster hadoop pas de local
CHARGER des DONNÉES INPATH 'Test2.json " DANS la TABLE ma_table;
Mon test
OriginalL'auteur Salem
pour le parsing json
basé sur cwiki/confluence nous avons besoin de suivre quelques étapes
besoin de télécharger hive-hcatalog-core.jar
ruche> add jar /path/hive-hcatalog-core.jar
create table nom_table(colname1 type de données,.....) ligne formatserde'org.apache.de la ruche.hcatalog.les données.JsonSerDe " stockés comme ORCFILE;
colname dans la création de la table et colname dans l'essai.json doit être la même si pas, il affichera les valeurs null
Espérons qu'il wil serviable
OriginalL'auteur Jagadeesh