xml - what - xsd restriction pattern



복잡한 XML 스키마-하이브 스키마 (0)

하이브 테이블에 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}]}}




serde