Получение нулевого значения из массива структур из XML с использованием XML-файла улья - PullRequest
0 голосов
/ 20 марта 2019

Итак, у меня есть этот XML-файл:

<wd:File xmlns:wd="urn:com.workday/bsvc">
<wd:Report_Entry>
<wd:Job_Application wd:Descriptor="Agent Smith - R-00620 Pharmacist Manager - Sam's -R2_RHO_H&W_008 (C-00549)">
<wd:ID wd:type="WID">35fe6a9de198812f1f1af872e801de13</wd:ID>
<wd:ID wd:type="Job_Application_ID">JOB_APPLICATION-6-882</wd:ID>
</wd:Job_Application>
<wd:Interviews_group>
<wd:Interview wd:Descriptor="Interview: Agent Smith - R-00620 Pharmacist Manager - Sam's -R2_RHO_H&W_008 (C-00549)">
<wd:ID wd:type="WID">b6d03b1bf47c01e065c15380b437ef1f</wd:ID>
</wd:Interview>
<wd:Interview_Date>2019-03-15-07:00</wd:Interview_Date>
<wd:Interviewer wd:Descriptor="Chad Burke">
<wd:ID wd:type="WID">e83ebdbd2a0a01f021aff165a5e94cca</wd:ID>
<wd:ID wd:type="Employee_ID">105150473</wd:ID>
</wd:Interviewer>
<wd:Interview_Overall_Rating wd:Descriptor="3 - Highly Recommend">
<wd:ID wd:type="WID">dc2b915581810140cdfb4b12c924341f</wd:ID>
</wd:Interview_Overall_Rating>
<wd:Competency_Interview_Feedback>0</wd:Competency_Interview_Feedback>
</wd:Interviews_group>
<wd:Interviews_group>
<wd:Interview wd:Descriptor="Interview: Agent Smith - R-00620 Pharmacist Manager - Sam's -R2_RHO_H&W_008 (C-00549)">
<wd:ID wd:type="WID">b6d03b1bf47c01e065c15380b437ef1f</wd:ID>
</wd:Interview>
<wd:Interview_Date>2019-03-15-07:00</wd:Interview_Date>
<wd:Interviewer wd:Descriptor="ADAM COOPER">
<wd:ID wd:type="WID">2b4ab86a080101f93043d3d28913c123</wd:ID>
<wd:ID wd:type="Employee_ID">225027082</wd:ID>
</wd:Interviewer>
<wd:Interview_Overall_Rating wd:Descriptor="3 - Highly Recommend">
<wd:ID wd:type="WID">dc2b915581810140cdfb4b12c924341f</wd:ID>
</wd:Interview_Overall_Rating>
<wd:Competency_Interview_Feedback>0</wd:Competency_Interview_Feedback>
</wd:Interviews_group>
</wd:Report_Entry>
</wd:File>

Вот массив структур с именем Interviews_group и внутри, которые имеют несколько тегов. Я должен загрузить этот файл в куст. Поэтому я использую улей XmlSerDe. И мой улей запрос выглядит следующим образом:

Hive Query:
    CREATE EXTERNAL TABLE IF NOT EXISTS staging.applications_test
    (Job_Application string,
    Job_Application_ID string,
    Interviews_group array<struct<Interview:string,Interview_date:string,Interviewer:String,Interviewr_ID:String,Interview_Overall_Rating:string,Competency_Interview_Feedback:string>>
    )
    ROW FORMAT SERDE 'com.walmart.spss.hive.serde2.xml.XmlSerDe'
    WITH SERDEPROPERTIES("column.xpath.Job_Application"="//*[local-name()='Job_Application']/@*[local-name()='Descriptor']",
    "column.xpath.Job_Application_ID"="//*[local-name()='Job_Application']/*[local-name()='ID'][contains(@*[local-name()='type'],'Job_Application_ID')]/text()",
    "column.xpath.Interviews_group"="//*[local-name()='Interview']/@*[local-name()='Descriptor']"

    )
    STORED AS
    INPUTFORMAT 'com.walmart.spss.hive.serde2.xml.XmlInputFormat'
    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
    LOCATION '/user/hive/hr/highsecure/raw/hiring/wd/job_applications/'
    TBLPROPERTIES (
    "xmlinput.start"="<wd:Report_Entry>",
    "xmlinput.end"="</wd:Report_Entry>",
    "xmlinput.nsstart"="<wd:File xmlns:wd='urn:com.workday/bsvc'>",
    "xmlinput.nsend"="</wd:File>"
    );

к сожалению, результаты в Interviews_group дают мне нулевые значения вместо заполнения значений xml.

Output:
    Interviews_group   

         [{"interview":null,
        "interview_date":null,
        "interviewer":null,
        "interviewr_id":null,
        "interview_overall_rating":null,
        "competency_interview_feedback":null}]

Я получаю точные значения для col 1 и col2, но не для col 3, то есть Interviews_group.

Как мне этого добиться? Ожидаемый результат:

         [{"interview":xml_value,
        "interview_date":xml_value,
        "interviewer":xml_value,
        "interviewr_id":xml_value,
        "interview_overall_rating":xml_value,
        "competency_interview_feedback":aml_value}]

Примечание: xml_value - это значение, указанное в xml. Из-за проблем с пространством я просто заменил xml_value.

...