Sql 从数据库中JSON格式的列查询JSON属性
这就是我面临的问题 我有一个名为GAMELOG的表(可以是SQL表或NoSQL列族),它如下所示: ID INT, 请求日期, 请求消息VARCHAR, 答复日期, 应答消息VARCHAR REQUESTMESSAGE和RESPONSEMESSAGE列是JSON格式的。 例如,假设REQUESTMESSAGE中的特定值为: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" } {
{
"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如何处理这样的查询,或者您的数据将如何存储/索引,我无法确定性能。你得自己测试一下。