2016-12-23 3 views
2

Я использую XPath для синтаксического анализа XML с помощью свинью, но в моем случае использования я должен разобрать весь файл XML и перенести его в улья таблицы. Я думаю использовать XPath для синтаксического анализа XML-файла, а затем переместить эти анализируемые данные в таблицу hive с помощью свиньи. Но есть ли другой способ сделать это?Анализировать XML и хранить в улей таблице

+0

Можете ли вы предоставить образец XML-файла? –

+0

@SandeepSingh на самом деле это конфиденциально для моей компании, а также очень чувствительные данные, поэтому я не могу поделиться им. Вы можете думать о нем как о 30000 строках данных XML. – animal

+0

Я могу это понять. Вы можете анализировать XML-файл с помощью Hive и XPath. Исходя из этой информации, я могу предложить один ответ. см. ниже. –

ответ

3

Мы можем проанализировать XML-файл в Hive с помощью hivexmlserde.

Создайте таблицу внешнего улья с помощью hivexmlserde и поместите весь XML-файл в это местоположение xml (все файлы xml должны быть похожими). Используя этот серд, вам нужно определить начальный и конечный теги в инструкции create table и XPath атрибутов, которые вы хотите получить.

См. Пример ниже.

add jar /home/udf_jars/hivexmlserde-1.0.5.3.jar; 
CREATE EXTERNAL TABLE hive_test_xml(
col1   string, 
col2   string, 
col3   string 
) 
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
WITH SERDEPROPERTIES (
"column.xpath.col1"="/Books/col1/text()", 
"column.xpath.col2"="/Books/col2/text()", 
"column.xpath.col3"="/Books/col3/text()" 
) 
STORED AS 
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' 
LOCATION ' /user/user1/xml/data' 
TBLPROPERTIES (
"xmlinput.start"="<Books", 
"xmlinput.end"="</Books>"); 

Для получения более подробной информации, пожалуйста, посетите Hive-XML-Options ссылку больше об этом.

Обновление: Как выбрать данные из таблицы.

Перед запросом необходимо добавить hivexmlserde-1.0.5.3.jar. См. Пример ниже.

hive> add jar /path/to/jar/hivexmlserde-1.0.5.3.jar; 
Added [add jar /path/to/jar/hivexmlserde-1.0.5.3.jar] to class path 
Added resources: [add jar /path/to/jar/hivexmlserde-1.0.5.3.jar] 
hive> use mydatabase_name; 
OK 
Time taken: 0.021 seconds 
hive> select * from xm_table; 

Вы также можете установить эту банку навсегда, чтобы не добавлять все время до запроса. Ниже приведена ссылка

Adding/Defining Jars in Hive permanently

+0

Большое спасибо за вашу помощь. – animal

+0

Пожалуйста, воздержитесь от моего вопроса. – animal

+0

У меня есть один вопрос, могу ли я поместить все мои файлы xml в одном месте в той же папке как 'LOCATION '/ user/user1/xml/data /'' где ** data ** - это имя моей папки? – animal

Смежные вопросы