gpt4 book ai didi

database - 如何在 cassandra 中为表建模以使用 where 条件进行选择

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:12 25 4
gpt4 key购买 nike

假设我有一张如下所示的表格

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"等的完整数据,我该如何选择。

因为当我尝试使用条件 user='Aqib' 的简单选择查询时,它给出了错误。我知道 cassandra 中的数据建模与 sql 中的不同。任何人都可以帮助我,非常感谢。

如何更改上面的表创建以满足下面的查询,

select * from userevent where user='Aqib';
select * from userevent where eventtype='DemoType';
select * from userevent where action='Login';

等等

最佳答案

首先:Cassandra 查询中没有OR

如果在您的查询中您总是限制一个字段,如 usereventtypeaction 那么我建议您创建一个单独的表这些类型的查询中的每一种,一个表支持查询 user 字段,其中 partition key 将是 user 字段和另一个表eventtype作为partition key,支持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 所在的表> 字段为partition key,限制user字段值,例如:

select * from userTable where user='Aqib';

否则,如果您知道您有 eventtype 字段值,那么您应该查询 partition keyeventtype 字段的表示例:

select * from eventtypeTable where eventtype='DemoType';

其他字段及其表也是如此。

关于database - 如何在 cassandra 中为表建模以使用 where 条件进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com