如何使用mysql查询从Column中提取所有字段

时间:2011-08-22 14:11:19

标签: mysql

列中的数据以此格式存储。我将数据以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

但它并没有给我带来好成绩。一些结果终止。请建议

2 个答案:

答案 0 :(得分:1)

我没有给你答案,但有些想法发生在我身上,我想我可能会分享。

首先,虽然我不推荐它,但您可能使用许多JSON解析库之一来编写Java中的存储过程来解析日志条目。我不认为MySQL支持这个,但许多其他DBMS产品(例如Postgres和Oracle)都支持。其中一个缺点是,您将始终必须执行全表扫描,并且日志可能会变得非常大。

既然你已经弄清楚如何用Python解析它,你可能会考虑这样做:

  1. 使用python
  2. 将JSON解析为其组成元素
  3. 将这些元素插入数据库(当然正确规范化)以及存储为文本BLOB的原始JSON以供参考
  4. 现在你可以做一些明智的查询,例如“在这个日期范围内显示我的日志条目,其中演员电子邮件是fred@gmail.com”并且能够利用索引等。没有太多理由保留原始JSON但是有一天,当格式意外改变并且您发现没有任何解析工作时,您可能会很高兴。

    菲尔

答案 1 :(得分:0)

我是使用Python文本处理完成的。因为没有通过Sql的好方法。