xml हाइव स्कीमा के लिए जटिल एक्सएमएल स्कीमा



hadoop hive (0)

मैं एक एक्सएमएल फ़ाइल को हाइव टेबल में लोड करने की कोशिश कर रहा हूं। मैं XML सर्व का उपयोग कर रहा हूं [यहां] [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"}]}}}]}}

मैं यह पूरे एक्सएमएल एक ही छत्ते स्तंभ में लोड करना चाहता था मैंने निम्नलिखित की कोशिश की:

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}]}}




serde