从 Cassandra CQL 中的多个表中进行选择
Selecting from multiple tables in Cassandra CQL
所以我在使用的查询中有两个表:
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;
但是它抛出错误:
mismatched input 'as' expecting EOF (..., B.name FROM airports [as] A...)
无论如何我可以在 Cassandra CQL 中做我想做的事情(这就是它的关系工作方式)吗?
简短的回答是,Cassandra 中没有连接。时期。因此,使用基于 SQL 的 JOIN 语法将产生类似于您在上面 post 编辑的错误。
Cassandra(或任何分布式数据库)的想法是确保您的查询可以由单个节点提供服务(减少网络时间)。确实没有办法保证可以从单个节点查询来自不同 table 的数据。出于这个原因,分布式连接通常被视为一种反模式。为此,Cassandra 根本不允许它们。
在 Cassandra 中,您需要采用基于查询的建模方法。因此,您 可以 通过从 post-join 结果集构建 table 来解决此问题,该结果集包含 dst_ap
和 [=11= 的所需组合].您必须找到一种适当的方法来划分此 table,但最终您会希望基于 A) 您希望看到的结果集和 B) 您希望在 WHERE 子句中过滤的属性来构建它.
所以我在使用的查询中有两个表:
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;
但是它抛出错误:
mismatched input 'as' expecting EOF (..., B.name FROM airports [as] A...)
无论如何我可以在 Cassandra CQL 中做我想做的事情(这就是它的关系工作方式)吗?
简短的回答是,Cassandra 中没有连接。时期。因此,使用基于 SQL 的 JOIN 语法将产生类似于您在上面 post 编辑的错误。
Cassandra(或任何分布式数据库)的想法是确保您的查询可以由单个节点提供服务(减少网络时间)。确实没有办法保证可以从单个节点查询来自不同 table 的数据。出于这个原因,分布式连接通常被视为一种反模式。为此,Cassandra 根本不允许它们。
在 Cassandra 中,您需要采用基于查询的建模方法。因此,您 可以 通过从 post-join 结果集构建 table 来解决此问题,该结果集包含 dst_ap
和 [=11= 的所需组合].您必须找到一种适当的方法来划分此 table,但最终您会希望基于 A) 您希望看到的结果集和 B) 您希望在 WHERE 子句中过滤的属性来构建它.