列中的数据以此格式存储。我将数据以JSON格式存储在列
中{"item": {
"actor":{
"time":"2011-08-21 21:56:37",
"ip":"127.0.0.1",
"id":"2010072123522251",
"email":"abc@abc.com",
"session_id":"c05e3e61a19650b4ca12a21c2e34df5f",
"loggedout":""},
"action":{
"name":"publish",
"text":"a_id=11714" ,
"a_id":"11714"
}
}}
现在我想要像这样的结果
time ip id email session_id
2011-08-21 21:56:37 127.0.0.1 2010072123522251 2010072123522251 2010072123522251
我使用了这样的查询
SUBSTRING(msg,LOCATE('a_id',msg)+5,(LOCATE('"',msg)+2) ) AS answer_id
但它并没有给我带来好成绩。一些结果终止。请建议
答案 0 :(得分:1)
我没有给你答案,但有些想法发生在我身上,我想我可能会分享。
首先,虽然我不推荐它,但您可能使用许多JSON解析库之一来编写Java中的存储过程来解析日志条目。我不认为MySQL支持这个,但许多其他DBMS产品(例如Postgres和Oracle)都支持。其中一个缺点是,您将始终必须执行全表扫描,并且日志可能会变得非常大。
既然你已经弄清楚如何用Python解析它,你可能会考虑这样做:
现在你可以做一些明智的查询,例如“在这个日期范围内显示我的日志条目,其中演员电子邮件是fred@gmail.com”并且能够利用索引等。没有太多理由保留原始JSON但是有一天,当格式意外改变并且您发现没有任何解析工作时,您可能会很高兴。
菲尔
答案 1 :(得分:0)
我是使用Python文本处理完成的。因为没有通过Sql的好方法。