假设我有一张和下面一样的table
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'的简单select查询时,它的给定错误。我知道cassandra中的数据建模与sql中的不同。任何人都可以帮助我,这是非常可观的。
如何更改上面的表创建以满足下面的查询,
select * from userevent where user='Aqib';
select * from userevent where eventtype='DemoType';
select * from userevent where action='Login';
等
1条答案
按热度按时间ff29svar1#
第一件事:没有
OR
在cassandra查询中如果在你的查询中你总是限制一个像
user
或者eventtype
或者action
然后我建议您为每种类型的查询创建一个单独的表,一个支持使用user
字段中的partition key
会是user
字段和另一个表eventtype
作为partition key
支持使用eventtype
字段和一个表action
字段等。。。这符合cassandra基于查询构建表的数据模型。所以支持查询的表
user
应该是:支持查询的表
eventtype
应该是:您可以创建任意多个表,每个表都支持一个查询。
然后在执行查询时(例如在应用程序代码中),如果您知道
user
字段值,然后查询user
字段是partition key
并限制user
字段值,例如:如果你知道你有
eventtype
字段值,则应查询partition key
是eventtype
字段,例如:对于其他字段及其表也是如此。