从 Cassandra CQL 中的多个表中进行选择

mad*_*mma 1 cql cassandra nosql cql3 cqlsh

所以我正在使用的查询中有两个表:

SELECT
    R.dst_ap, B.name
FROM airports as A, airports as B, routes as R
WHERE R.src_ap = A.iata
AND R.dst_ap = B.iata;
Run Code Online (Sandbox Code Playgroud)

但是它抛出错误:

mismatched input 'as' expecting EOF (..., B.name    FROM airports [as] A...)
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以在 Cassandra CQL 中做我想做的事情(这就是它的相关工作方式)吗?

Aar*_*ron 5

简而言之,Cassandra 中没有连接。时期。因此,使用基于 SQL 的 JOIN 语法将产生类似于您上面发布的错误。

Cassandra(或任何分布式数据库)的想法是确保您的查询可以由单个节点提供服务(减少网络时间)。实际上没有办法保证可以从单个节点查询来自不同表的数据。因此,分布式连接通常被视为一种反模式。为此,Cassandra 根本不允许他们这样做。

在 Cassandra 中,您需要采用基于查询的建模方法。因此,您可以通过从连接后结果集构建一个表来解决此问题,该表由dst_ap和的所需组合组成name。您必须找到一种适当的方法来对该表进行分区,但最终您会希望基于 A)您期望看到的结果集和 B)您期望在 WHERE 子句中过滤的属性来构建它。