假设我有一张如下所示的表格
create table userevent(id uuid,eventtype text,sourceip text,user text,sessionid text,roleid int,menu text,action text,log text,date timestamp,PRIMARY KEY (id,eventtype));
id | action | date | eventtype | log | menu | roleid | sessionid | sourceip | user
--------------------------------------+--------+--------------------------+-----------+----------+-----------+--------+-----------+--------------+-------
6ac47b10-d6bb-11e8-bb9a-59dfa00365c6 | Login | 2018-10-01 04:05:00+0000 | DemoType | demolog | demomenu | 1 | Demo_1 | 121.11.11.12 | Aqib
62119cf0-d6bb-11e8-bb9a-59dfa00365c6 | Login | 2018-05-31 22:35:00+0000 | DemoType3 | demolog3 | demomenu3 | 3 | Demo_3 | 121.11.11.12 | Jasim
5ebb4600-d6bb-11e8-bb9a-59dfa00365c6 | Login | 2018-05-31 22:35:00+0000 | DemoType3 | demolog3 | demomenu3 | 3 | Demo_3 | 121.11.11.12 | Jasim
那么如果我想要满足表中 user="something"或 eventtype="something"等的完整数据,我该如何选择。
因为当我尝试使用 where 条件 user='Aqib' 进行简单的选择查询时,它给出了错误。我知道cassandra中的数据建模与sql中的数据建模不同。 任何人都可以帮助我,这是非常值得赞赏的。
如何更改上面的表创建以满足以下查询,
select * from userevent where user='Aqib';
select * from userevent where eventtype='DemoType';
select * from userevent where action='Login';
等等
最佳答案
首先要做的事情:Cassandra 查询中没有 OR
如果在查询中您始终限制诸如 user
或 eventtype
或 action
之类的字段,那么我建议您为以下内容创建一个单独的表:每一种类型的查询,一个表支持使用user
字段进行查询,其中分区键
将是user
字段,而另一个表则支持使用user
字段进行查询。 eventtype
作为分区键
,支持使用eventtype
字段进行查询,以及一张表用于action
字段等。 .. 这符合 Cassandra 根据您的查询构建表的数据建模。
所以支持用user
查询的表应该是:
CREATE TABLE userTable (
user text,
id uuid,
eventtype text,
sourceip text,
sessionid text,
roleid int,
menu text,
action text,
log text,
PRIMARY KEY (user)
);
支持使用eventtype
查询的表应该是:
CREATE TABLE eventtypeTable (
eventtype text,
id uuid,
user text,
sourceip text,
sessionid text,
roleid int,
menu text,
action text,
log text,
PRIMARY KEY (eventtype)
);
您可以创建任意数量的表,每个表都支持一个查询。
然后,当您执行查询时(例如在应用程序代码中),如果您知道您具有 user
字段值,则查询 user
所在的表> 字段是分区键
并限制user
字段值,例如:
select * from userTable where user='Aqib';
否则,如果您知道自己有 eventtype
字段值,那么您应该查询 分区键
是 eventtype
字段的表示例:
select * from eventtypeTable where eventtype='DemoType';
其他字段及其表格也类似。
关于database - 如何在 cassandra 中对表进行建模以根据 where 条件进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948879/