J'essaie de charger un fichier XML dans la table Hive. J'utilise xml serde here. Je suis capable de charger des fichiers plats simples xml. Mais quand il y a des éléments imbriqués dans le xml, j'utilise des types de données complexes de ruche pour les stocker (par exemple, array<struct>
). Ci-dessous l'exemple de xml que j'essaye de charger. Mon but est de charger tous les éléments, attributs et contenus dans la table Hive.Schéma XML vers le schéma Hive
<description action="up">
<name action="aorup" ln="te">
this is name1
</name>
<name action="aorup" ln="tm">
this is name2
</name>
<name action="aorup" ln="hi">
this is name2
</name>
</description>
sortie Hive que je suis en train de faire est ...
{action:"up", name:[{action:"aorup", ln:"te", content:"this is name1"}, {action:"aorup", ln:"tm", content:"this is name2"}, {action:"aorup", ln:"hi", content:"this is name3"}]}
Je voulais charger l'ensemble de ce xml en une seule colonne ruche. J'ai essayé les éléments suivants:
CREATE TABLE description(
description STRUCT<
Action:STRING,
name:ARRAY<STRUCT<
Action:STRING, ln:STRING, content:STRING
>>
>)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"xml.processor.class"="com.ximpleware.hive.serde2.xml.vtd.XmlProcessor",
"column.xpath.description"="/description")
STORED AS INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
TBLPROPERTIES ("xmlinput.start"="<description ","xmlinput.end"= "</description>");
Mais je suis nulle pour obtenir la valeur Label
champ. Est-ce que quelqu'un peut m'aider?
Merci
Merci beaucoup pour la réponse. Pouvez-vous s'il vous plaît expliquer l'instruction 'create table'. Cela me déroute. J'ai essayé votre solution sur un autre schéma xml imbriqué dans cette question [link] (https://stackoverflow.com/questions/44494364/complex-xml-schema-to-hive-schema). mais n'a pas pu obtenir la solution. . Pouvez-vous s'il vous plaît expliquer où je me suis trompé? –