2017-06-12 4 views
0

J'ai un fichier avec les données JSON qui prend la forme ci-dessous:Créer une table ruche avec Json Tableau de différentes data_types

Ex: { "Nom": "xxxx", "Adresse": [ { "Street": "aa", "Ville": "bbb" } { "Street": "ccc", "Ville": "ddd", "Pays": "eee" } ] }

Le Json ci-dessus est un Json valide. Je veux créer une table de ruche au-dessus des données de la forme ci-dessus en utilisant JsonSerde.

Répondre

0

Créer une table avec tous les champs possibles définis. Si le champ est pas présent dans JSON, select retournera NULL:

CREATE EXTERNAL TABLE your_table (
Name string, 
Address array<struct<Street:string,City:string,Country:string>> 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 

si vous avez des noms dans le fichier JSON qui sont en conflit avec Hive mots réservés ajouter ensuite la cartographie et de renommer les noms dans la définition de la table:

WITH SERDEPROPERTIES ('mapping.renamed_column'='original_column') et rebaptisent vos colonnes de table.

Placez votre fichier dans l'emplacement de la table.

Voir aussi docs avec quelques exemples ici: https://github.com/rcongiu/Hive-JSON-Serde

+0

Probablement, ma question est trompeur. Mais, en fait, j'ai besoin de créer une structure de table qui accepte un tableau de types de données différents. J'ai lu que ce n'est pas possible. Mais, besoin d'un travail pour cela. – Cheater

+0

Qu'est-ce que cela signifie? Où sont les différents types de données dans votre exemple? Vous voulez dire par exemple 'string' et' double'? Ensuite, utilisez 'string' et essayez de doubler en sélectionnant. cast reviendra null si pas possible de lancer – leftjoin