Итак, у меня есть этот XML-файл:
<?xml version="1.0" encoding="UTF-8"?>
<pfx:BusinessUnits xmlns:pfx="http://someurl" xmlns:xsi="http://someurl" xsi:schemaLocation="http://someurl BusinessUnitDetails.xsd">
<businessUnit xmlns="http://someurl">
<businessUnit>
<name>store one</name>
<number>1</number>
</businessUnit>
<Departments>
<number>8</number>
<description>division eight</description>
<contact>
<phone>
<number>123456789</number>
<type>primary</type>
</phone>
<type>MAIN PHONE 1</type>
<contact>
<phone>
<number>987654321</number>
<type>secondary</type>
</phone>
<type>MAIN PHONE 2</type>
</contact>
<Departments>
<Departments>
<number>10</number>
<description>division 2</description>
<contact>
<phone>
<number>123456789</number>
<type>primary</type>
</phone>
<type>MAIN PHONE 1</type>
<contact>
<phone>
<number>987654321</number>
<type>secondary</type>
</phone>
<type>MAIN PHONE 2</type>
</contact>
<Departments>
</businessUnit>
</pfx:BusinessUnits>
Вот массив структур, а внутри это еще один массив структур. Я должен загрузить этот файл в куст. Поэтому я использую улей XML Serde.
CREATE TABLE mydatabase.xmlLoad(
store_nbr INT,
divisions
array<
struct<
divisionDepartments:struct<
number:string,
contact:array<struct<
phone:struct<
number:string,
type:string>,
type:string
>
>>
>
>
)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
'column.xpath.store_nbr'='/*[local-name()="businessUnitDetail"]/*[local-name()="businessUnit"]/*[local-name()="number"]/text()',
'column.xpath.divisions'='/*[local-name()="businessUnitDetail"]/*[local-name()="divisionDepartments"]/*'
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
TBLPROPERTIES (
'xmlinput.start'='<businessUnitDetail',
'xmlinput.end'='</businessUnitDetail>'
);
Я хочу взять номер магазина, номер отдела и информацию о контактах, где только ГЛАВНЫЙ ТЕЛЕФОН 1.
к сожалению, результаты дают мне нулевой результат.
вывод:
store_nbr
48
98
99
100
Departments
[{"Departments":null},{"Departments":null},{"divisiondepartments":null},{"Departments":null},{"Departments":null},{"divisiondepartments":null},{"Departments":null},{"Departments":null},
ожидаемый результат:
store_nbr | Division_NBR | contact_type | phone_nbr
1 8 ГЛАВНЫЙ ТЕЛЕФОН 1 123456789
2 10 ГЛАВНЫЙ ТЕЛЕФОН 1 987654321
Как мне достичь этого результата?