2016-12-23 5 views
2

私はを使用してXMLを解析するためにのXPathを使用していますが、私のユースケースでは、私は、XMLファイル全体を解析し、ハイブテーブルに移動する必要があります。私はXPathを使ってXMLファイルを解析し、その解析されたデータをブタを使ってハイブテーブルに移動することを考えています。しかし、それを行うための他の方法はありますか?解析用XMLおよびストア

+0

サンプルxmlファイルは提供できますか? –

+0

@SandeepSingh実際に私の会社にとって機密であり、非常に機密性の高いデータを持っているので、共有できません。これを30000行のXMLデータと考えることができます。 – animal

+0

私はそれを理解することができます。 HiveとXPathを使用してXMLファイルを解析できます。これらの情報に基づいて、私は1つの答えを提案することができます。下にそれを見てください。 –

答えて

3

hivexmlserdeを使用して、HiveでXMLファイルを解析できます。

hivexmlserdeを使用して外部のHiveテーブルを作成し、すべてのxmlファイルをそのxmlの場所に配置します(すべてのxmlファイルは似ている必要があります)。このserdeを使用して、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; 

また、このjarを永続的に設定して、クエリを実行する前に常に追加することを避けることもできます。以下のリンクに従ってください

Adding/Defining Jars in Hive permanently

+0

ご協力いただきありがとうございます。 – animal

+0

私の質問をupvoteしてください。 – animal

+0

私は1つの質問があります。すべてのXMLファイルを同じフォルダ内のある場所に置くことができます 'LOCATION '/ user/user1/xml/data /''のように** data **は私のフォルダ名ですか? – animal