2015-02-23 68 views
0

所以我有一個AVRO文件,並且沒有任何關於該類型文件的經驗,所以我讀取了該文件的內容並將其保存到文本文件中,所以現在我試圖解析每一行並將其添加到MySQL表中。我知道如何使用Java連接到MySQL數據庫,並且基本上會執行一個查詢來添加每行的數據。 但是我有被解析我的數據的麻煩的部分,基本上這就是每一行的樣子(每個值是「字符串」):解析文本行並將其添加到MySQL中

{"content": "HTML", "GLOBALEVENTID": "331284989", "SQLDATE": "20140111", "MonthYear": "201401", "Year": "2014"} 

那麼還有比這更列,但我縮短它也是「內容」字段實際上是一個網頁的HTML,所以它可以包含很多隨機字符,我認爲這可能是解析時的一個問題。但我的問題是,我試圖解析出每列的值並將其添加到數組(內容,GLOBALEVENTID等),那麼我可以將它添加到已經定義了這些列的MySQL表中?任何可以幫助我指出我朝着正確的方向的東西都是值得讚賞的!

+0

它看起來像JSON。我敢打賭,有一個庫可以用Java將這種格式解析爲地圖對象或類似的東西 – 2015-02-23 20:31:42

+0

這看起來很像JSON ...如果你可以驗證每一行是JSON,那麼你有很多工具可以用來解析這真的很無痛......例如,檢查出http://theoryapp.com/parse-json-in-java/ – wilkesybear 2015-02-23 20:32:02

回答

0

的方法來解決這個問題,這取決於你正在努力實現:

案例1)如果這只是一個時間的負載 答:對於一個時間加載,讀取AVRO文件,將其解析爲文本文件,然後使用RDBMS API將數據傳播到MySQL,這是非常麻煩的工作。相反,我會建議使用MySQL導入實用程序。 如果您轉到模式瀏覽器,並右鍵單擊表名稱,您會看到一個選項「導入...」 這些選項是說明性的。通常,使用CSV或XLS文件進行一次加載。您可以修改已有的程序,將AVRO文件轉換爲CSV文件並使用該文件將數據導入MySQL表格。

情況2)如果AVRO文件要通過程序讀取,並且此操作將在未來進行多次。 在這種情況下,您可以使用衆多庫中的一個(例如:Jackson/GSON)將修改後的AVRO文件解析爲有效的Java對象POJO。確保Object表示是一個ORM(例如:JPA/Hibernate)實體。 例如:

JSON:{ 「內容」: 「HTML」, 「GLOBALEVENTID」: 「331284989」, 「SQLDATE」: 「20140111」, 「MonthYear」: 「201401」, 「年」: 「2014」 }

類文件:

@Entity 
@Table(name = "CONTENT") 
class Content { 

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SOME_SEQUENCE") 
private Long id; 

@Column(name = "DATA") 
private String data; 

@Column(name = "GLOBALEVENTID") 
private String globalEventId; 

@Column(name = "DATE") 
@Temporal(TemporalType.TIMESTAMP) 
private String date; 

.... 
.... 
} 

一旦數據被解析到ORM實體,將其保存到數據庫應該是很容易的。按照您的方式,您可以使用entityManager.save/update或entitryManager.saveAll/updateAll

相關問題