在 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 carMakecarModel:

 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 将覆盖自身。