Sql 从数据库中JSON格式的列查询JSON属性

Sql 从数据库中JSON格式的列查询JSON属性,sql,json,cassandra,nosql,Sql,Json,Cassandra,Nosql,这就是我面临的问题 我有一个名为GAMELOG的表(可以是SQL表或NoSQL列族),它如下所示: ID INT, 请求日期, 请求消息VARCHAR, 答复日期, 应答消息VARCHAR REQUESTMESSAGE和RESPONSEMESSAGE列是JSON格式的。 例如,假设REQUESTMESSAGE中的特定值为: { "name" : "John", "specialty" : "Wizard", "joinDate" : "17-Feb-1988" } {

这就是我面临的问题

我有一个名为GAMELOG的表(可以是SQL表或NoSQL列族),它如下所示:

ID INT, 请求日期, 请求消息VARCHAR, 答复日期, 应答消息VARCHAR

REQUESTMESSAGE和RESPONSEMESSAGE列是JSON格式的。 例如,假设REQUESTMESSAGE中的特定值为:

{
    "name" : "John",
    "specialty" : "Wizard",
    "joinDate" : "17-Feb-1988"
}
{
    "name" : "John Doe",
    "specialty" : "Wizard",
    "joinDate" : "17-Feb-1988",
    "level" : 89,
    "lastSkillLearned" : "Megindo"
}
对于响应消息:

{
    "name" : "John",
    "specialty" : "Wizard",
    "joinDate" : "17-Feb-1988"
}
{
    "name" : "John Doe",
    "specialty" : "Wizard",
    "joinDate" : "17-Feb-1988",
    "level" : 89,
    "lastSkillLearned" : "Megindo"
}
现在,我的表中的数据已经增长到难以置信的大(大约十亿行,几TB的硬盘空间)

我要做的是查询包含JSON属性“name”的行,该属性在REQUESTMESSAGE中的值为“John”

我对SQL数据库的理解,以及我以前使用过的Oracle,我必须将REQUESTMESSAGE和RESPONSEMESSAGE作为CLOB,并使用LIKE进行查询,即

SELECT * FROM GAMELOG WHERE REQUESTMESSAGE LIKE '%"name" : "John"%';
但是,结果是非常缓慢和痛苦的

现在,我转到Cassandra,但我不知道如何正确地查询它,我还没有使用ApacheHadoop来获取数据,我打算稍后使用它来获取数据

我的问题是,是否有数据库产品支持在表/列族中选择JSON格式的JSON属性的查询?据我所知,MongoDB将文档存储在JSON中,但这意味着我的所有列系列都将存储为JSON,即

{
    "ID" : 1,
    "REQUESTMESSAGE" : "{
                          "name" : "John",
                          "specialty" : "Wizard",
                          "joinDate" : "17-Feb-1988"
                        }",
    "REQUESTDATE" : "17-Feb-1967"
    "RESPONSEMESSAGE" : "{
                            "name" : "John Doe",
                            "specialty" : "Wizard",
                            "joinDate" : "17-Feb-1988",
                            "level" : 89,
                            "lastSkillLearned" : "Megindo"
                         }",
     "RESPONSEDATE" : "17-Feb-1967"
}
我仍然很难在REQUESTMESSAGE列中获取JSON属性(如果我错了,请纠正我)


非常感谢

如果您不致力于将数据存储在Apache Cassandra中,MySQL具有可以从JSON值提取数据的SQL查询函数,特别是,您需要查看
JSON\u extract
函数:

在您的情况下,查询应该如下所示:

SELECT REQUESTMESSAGE, JSON_EXTRACT(REQUESTMESSAGE, "$.name")  
FROM GAMELOG 
WHERE JSON_EXTRACT(REQUESTMESSAGE, "$.name") = "John";

嗨,谢谢你的回答。性能查询如何?如果不知道MySQL如何处理这样的查询,或者您的数据将如何存储/索引,我无法确定性能。你得自己测试一下。