2014-11-24 17 views
0

我正在開發一個項目來分析Hadoop中的日誌文件。這些文件以XML格式存儲元數據。問題是,每個文件存儲多個請求,因此在同一個文件中有多個根元素。我無法更改日誌文件。有人可以幫助如何使用Hive查詢文件嗎? 文件的一個例子是使用多個XML對象查詢日誌文件

<?xml version="1.0" encoding="UTF-8" ?> 
    <book> 
     <title>C Proramming </title> 
     <price> 120.00 </price> 
    </book> 
    <book> 
     <title> Java for Dummies </title> 
     <price> 400 </price> 
    </book> 

現在,有2個元素,或者說沒有,因爲你想看到它。我如何繼續查詢這樣的文件?

非常感謝。

+0

這是一個很好的例子,說明爲什麼XML是一種可怕的日誌記錄格式 - 它不僅非常詳細,將日誌條目的大小加倍,而且日誌條目的未指定限制幾乎意味着不可避免的格式錯誤的文檔。當你需要分析它來創建一個有效的文檔時,你可以將整個文件的副本包裝在一個根元素中,但這是一個令人討厭的黑客行爲,所以我不打算將它作爲答案。 – glenatron 2014-11-24 12:26:28

+0

@glenatron我寧願爭辯說,你的評論是一個很好的例子,指責沒有理由的人責怪XML。首先,OP從不抱怨太大的日誌文件,因此修復一個不存在的問題是毫無意義的。在現實世界中,文件的大小通常無關緊要(誰在乎它是1MB還是2MB?)。當然有些情況很重要,但是XML可能不是最好的選擇。另外,把它放到一個聰明的XML數據庫中將會消除冗餘,並且存儲將會更小,更小 – dirkk 2014-11-24 12:35:31

+0

另外,這個文檔的格式不正確是XML的錯誤嗎?有很少的規則需要有一個格式良好的文檔。是什麼讓XML成爲「可怕的格式」,因爲某些程序正在生成無效數據?在每種存儲格式中,您都有規則如何存儲內容。創建一個根節點是沒有問題的,因此它絕不是「不可避免的」 – dirkk 2014-11-24 12:38:22

回答

2

這不是@glenatron指出的格式良好的XML文檔。

1)包裹元素的根元素來創建一個良好的文檔

2)打破該文件爲很多小的XML文檔:如果你要處理它作爲XML你只有兩個選擇這裏。

我不確定你有什麼工具可以使用,但是如果我是從Java讀取它,我可能會創建一個自定義子分類的InputStream或Reader來動態地爲它添加一個開始元素(在文檔聲明之後)和後綴與結束元素。通過這種方式,我可以將此流/閱讀器提供給任何XML DOM/SAX解析器或XPath/XQuery引擎,並將其視爲有效的XML文檔。