I use Cassandra
一个项目,这是我的第一个项目。
,我试图对两个表执行一个简单的请求,但这不起作用......
我想做类似的事情:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否可以请求两个表Cassandra
?我怎样才能做到这一点?
Thanks
我正在尝试对两个表执行一个简单的请求
您尝试执行的操作称为“分布式连接”,而 Cassandra 是专门为防止您执行此操作而设计的。
解决这些类型问题的方法是使用一个称为非规范化。假设您有两个简单的表carMake
and carModel
:
makeid | make
--------+--------
1 | Chevy
2 | Dodge
3 | Ford
modelid | makeid | model
---------+--------+---------
15 | 3 | Focus
11 | 3 | Mustang
32 | 2 | Charger
82 | 3 | Fusion
现在,在传统的 RDBMS 中,如果我想选择所有品牌为“Ford”的汽车型号,我将执行 JOIN 查询。但对于 Cassandra,我们的想法是在建模阶段解决这个问题,通过构建一个支持同时查询汽车品牌和型号的表:
CREATE TABLE carMakeModel (
carid int,
make text,
model text,
PRIMARY KEY (make,carid));
aploetz@cqlsh:stackoverflow> SELECT * FROM carMakeModel WHERE make='Ford';
make | carid | model
------+-------+---------
Ford | 1 | Mustang
Ford | 2 | Focus
Ford | 3 | Fusion
(3 rows)
这里需要注意的一些要点:
-
make
根据需要进行重复。您会注意到“Ford”在结果集中被指定了 3 次。如果您有 13 款福特汽车的数据,您将存储“福特”的值 13 次。
- Cassandra 中的主键是独一无二的。我有
carid
作为主键的一部分添加,以确保每个主键的唯一性model
,否则为每个插入一个make
会覆盖自身。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)