xml ファイルをハイブ テーブルにロードしようとしています。xml serde [ここ] [1] を使用しています。シンプルなフラット xml ファイルを読み込むことができます。しかし、xml にネストされた要素がある場合、それらを格納するためにハイブの複雑なデータ型を使用しています (例: array<struct>
)。以下は、ロードしようとしているサンプル xml です。私の目標は、すべての要素、属性、およびコンテンツをハイブ テーブルにロードすることです。
<classif action="del">
<code>123</code>
<class action="aou">
<party>p1</party>
<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>
</class>
<class action="a">
<party>p2</party>
<description action="up">
<name action="aorup" ln="te">
this is name4
</name>
<name action="aorup" ln="tm">
this is name5
</name>
<name action="aorup" ln="hi">
this is name6
</name>
</description>
</class>
</classif>
私が取得しようとしているハイブ出力は...
{action:"del", classif:{code:"123", class:[{action:"aou", class:{party:"p1", description:{action:"up", description:[{action:"aorup", ln:"te", name:"this is name1"}, {action:"aorup", ln:"tm", name:"this is name2"}, {action:"aorup", ln:"hi", name:"this is name3"}]}}}, {action:"a", class:{party:"p2", description:{action:"up", description:[{action:"aorup", ln:"te", name:"this is name4"}, {action:"aorup", ln:"tm", name:"this is name5"}, {action:"aorup", ln:"hi", name:"this is name6"}]}}}]}}
この xml 全体を単一のハイブ列にロードしたかったのです。私は次のことを試しました:
DROP TABLE classif;
CREATE TABLE classif(
classif STRUCT<
Action:STRING, classif:STRUCT<Code:STRING, class:ARRAY<STRUCT<Action:STRING, class:STRUCT<party:STRING, description:STRUCT<action:STRING,description:ARRAY<STRUCT<action:STRING,ln:STRING,name: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.classif"="/classif")
STORED AS INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
TBLPROPERTIES ("xmlinput.start"="<classif ","xmlinput.end"= "</classif>");
私が得ている出力:
{"action":"del","classif":{"code":"123","class":[{"action":null,"class":null},{"action":"up","class":null},{"action":null,"class":null},{"action":"up","class":null}]}}