как разобрать вложенный XML в Hive - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть этот xml с

<packet>
    <field1>AA</field1>
    <students>
        <student>
              <targets>
                    <target>
                           <field3></field3>
                           <field4></field4>
                    </target>
              </targets>
              <opt><field5></field5></opt>
        </student>
    </students>
</packet>

Я создал DDL как:

CREATE EXTERNAL TABLE ext_student (

students ARRAY<STRUCT<
field1:STRING,
field2:STRING,
student:ARRAY<
              STRUCT<field3:STRING,
                     field4:STRING>,
              STRUCT <field5:STRING>>
)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.field1"="/packet/field1/text()",
"column.xpath.Students"="/packet/Students/*"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION 'path to my xml'
TBLPROPERTIES (
"xmlinput.start"="<packet>",
"xmlinput.end"="</packet>");  

, когда я запрашиваю таблицу, я прекрасно вижу поле 1, но оно отображает массивы вэтот тип вывода

hive> select * from ext_student;

AA {{"field3": NULL, "field4": "NULL"}, {"field5": "NULL"}}

Я бы хотел

  1. заставить улей отображать значение (не все элементы имеют значение null)
  2. отображать мой вывод как AA valueofField3 valueofField4 valueofField5

есть кто-нибудь, кто, пожалуйста, может мне помочь?(Я не могу использовать Spark)

...