在 Cassandra 中选择两个表
selecting on two tables in Cassandra
我用 Cassandra
做一个项目,这是我的第一个项目。
,我正在尝试对两个表执行一个简单的请求,但这不起作用...
我想做这样的事情:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否可以请求 Cassandra
中的两个表?我该怎么做?
谢谢
I'm trying to do a simple request on two tables
您尝试做的事情被称为 "distributed join",而 Cassandra 专门设计用于防止您这样做。
解决这类问题的方法是使用称为 非规范化 的过程。假设您有两个简单的 tables carMake
和 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 中,如果我想 SELECT 所有品牌为 "Ford" 的汽车模型,我将执行 JOIN 查询。但是对于 Cassandra,想法是在建模阶段解决这个问题,通过构建一个 table 支持同时查询汽车品牌和型号的能力:
CREATE TABLE carMakeModel (
carid int,
make text,
model text,
PRIMARY KEY (make,carid));
aploetz@cqlsh:Whosebug> SELECT * FROM carMakeModel WHERE make='Ford';
make | carid | model
------+-------+---------
Ford | 1 | Mustang
Ford | 2 | Focus
Ford | 3 | Fusion
(3 rows)
这里需要注意的一些要点:
make
根据需要重复。您会注意到 "Ford" 在结果集中指定了 3 次。如果您有 13 种福特车型的数据,您将存储 "Ford" 的值 13 次。
- Cassandra 中的主键是唯一的。我已将
carid
添加为 PRIMARY KEY 的一部分,以确保每个 model
的唯一性,否则每个 make
的 INSERT 将覆盖自身。
我用 Cassandra
做一个项目,这是我的第一个项目。
,我正在尝试对两个表执行一个简单的请求,但这不起作用...
我想做这样的事情:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否可以请求 Cassandra
中的两个表?我该怎么做?
谢谢
I'm trying to do a simple request on two tables
您尝试做的事情被称为 "distributed join",而 Cassandra 专门设计用于防止您这样做。
解决这类问题的方法是使用称为 非规范化 的过程。假设您有两个简单的 tables carMake
和 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 中,如果我想 SELECT 所有品牌为 "Ford" 的汽车模型,我将执行 JOIN 查询。但是对于 Cassandra,想法是在建模阶段解决这个问题,通过构建一个 table 支持同时查询汽车品牌和型号的能力:
CREATE TABLE carMakeModel (
carid int,
make text,
model text,
PRIMARY KEY (make,carid));
aploetz@cqlsh:Whosebug> SELECT * FROM carMakeModel WHERE make='Ford';
make | carid | model
------+-------+---------
Ford | 1 | Mustang
Ford | 2 | Focus
Ford | 3 | Fusion
(3 rows)
这里需要注意的一些要点:
make
根据需要重复。您会注意到 "Ford" 在结果集中指定了 3 次。如果您有 13 种福特车型的数据,您将存储 "Ford" 的值 13 次。- Cassandra 中的主键是唯一的。我已将
carid
添加为 PRIMARY KEY 的一部分,以确保每个model
的唯一性,否则每个make
的 INSERT 将覆盖自身。