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

时间:2018-02-14 16:53:28

标签: cassandra nosql cql 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;

但是它引发了错误:

mismatched input 'as' expecting EOF (..., B.name    FROM airports [as] A...)

无论如何,我可以在Cassandra CQL中做我正在尝试做的事情(关系是如何工作的)?

1 个答案:

答案 0 :(得分:3)

简短的回答是,在Cassandra中没有加入。期。因此,使用基于SQL的JOIN语法将产生类似于您在上面发布的错误。

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

在Cassandra中,您需要采用基于查询的建模方法。因此,可以通过从您的联接后结果集构建表格来解决此问题,该表格包含import boto import boto.s3 from boto.s3.key import Key import os from os.path import join, dirname from dotenv import Dotenv dotenv = Dotenv(join(dirname(__file__), ".env")) os.environ.update(dotenv) AWS_ACCESS_KEY_ID= os.environ.get("AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY") class S3FileUpload(object): def process_item(self, item, spider): bucket = s3.get_bucket('my-bucket') k = Key(bucket) k.key = 'test.json' k.set_contents_from_string(str(item)) return item @media all and (max-width: 1690px) { ...} @media all and (max-width: 1280px) { ...} @media all and (max-width: 980px) { ... } @media all and (max-width: 736px) { ... } @media all and (max-width: 480px) { ... } 的所需组合。您必须找到一种适当的方法来对此表进行分区,但最终您需要基于A)您希望看到的结果集以及B)您希望在WHERE子句中过滤的属性来构建它。