解析文本行并添加到MySQL中

时间:2015-02-23 20:28:44

标签: java mysql parsing avro

所以我有一个AVRO文件并且没有任何关于该类型文件的经验,所以我读了该文件的内容并将其保存到文本文件中,所以现在我试图解析每一行并添加到MySQL表。我知道如何使用Java连接到MySQL数据库,并且基本上会执行添加每行数据的查询。 但是我遇到麻烦的部分是解析我的数据,基本上这就是每一行的样子(并且每个值都是' String'):

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

所以列数多于此数,但我缩短了它,也就是"内容" field实际上是一个网页的HTML,所以它可以包含很多随机字符,我认为这可能是解析时的一个问题。但所以我的问题是我试图解析每列的值并将其添加到数组(内容,GLOBALEVENTID等)中,那么我可以将它添加到已经定义了这些列的MySQL表中吗?任何可以帮助我指出正确方向的事情都值得赞赏!

1 个答案:

答案 0 :(得分:0)

两种 方法可以解决此问题,具体取决于您要实现的目标:

案例1)如果这只是一次性加载 答:对于一次性加载,读取AVRO文件,将其解析为文本文件,然后使用RDBMS API将数据播种到MySQL是太多的工作。 相反,我建议使用MySQL Import Utility。 如果您转到模式浏览器,并右键单击表名,您将找到一个选项"导入..." 选项是解释性的。通常,使用CSV或XLS文件完成一次加载。您可以修改已有的程序,将AVRO文件转换为CSV文件,并使用此文件将数据导入MySQL表。

案例2)如果要通过程序读取AVRO文件,将来会多次执行此操作。 在这种情况下,您可以使用众多库中的一个(例如:Jackson / GSON)将修改后的AVRO文件解析为有效的Java Object POJO。确保Object表示是ORM(例如:JPA / Hibernate)实体。 例如:

JSON:{"内容":" HTML"," GLOBALEVENTID":" 331284989"," SQLDATE" :" 20140111"," MonthYear":" 201401"," Year":" 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