Cassandraで、他のRDBMSのように、selectステートメントのwhere句の後に結合された複数の条件を使用することは可能ですか。これが私のコードです:
SELECT * from TABLE_NAME WHERE COND1= 'something' OR COND2 = 'something';
CONDがテーブルの主キーの名前であると仮定すると、次のことができます。
SELECT * from TABLE_NAME WHERE COND1 in ('something', 'something');
したがって、完全に一般的なOR
操作はありませんが、これはあなたがやろうとしていたことと同等であるように見えます。
CQLを使用する場合、クエリ計画はその長所の1つではないことを忘れないでください。Cassandraコードは通常、大量のデータがあることを前提としているため、コストがかかる可能性のあるクエリの実行を回避しようとします。RMDBSの世界では、固有の関係(第3正規形など)に従ってデータを構造化しますが、Cassandraでは、必要と予想されるクエリに従ってデータを構造化します。非正規化は(しゃれを許して)標準です。
重要なのは、CQLは、古いThriftRPCインターフェースよりもCassandraクエリを作成するためのより親しみやすく親しみやすい構文になることを目的としています。SQLのように完全に表現力があり柔軟であることを意図したものではありません。
簡単な答え:ORに相当するものはありません
http://www.datastax.com/docs/0.8/dml/using_cql
v0.8のコマンドリファレンスは次のとおりです。
http://www.datastax.com/docs/0.8/references/cql#cql-reference
SELECT [FIRST N] [REVERSED] FROM [USING] [WHERE] [LIMIT N];
..
WHERE句は、結果に表示される行をフィルタリングするために提供されます。この句は、キー名またはキーの範囲でフィルタリングでき、インデックス付き列の場合は列値でフィルタリングできます。キーフィルターは、KEYキーワード、関係演算子(=、>、> =、<、および<=のいずれか)、および用語値を使用して指定されます。関係演算子の両側に用語が表示される場合、フィルターはインデックス付きの列に適用されると見なされます。列インデックスフィルターでは、演算子の左側の用語が名前であり、右側の用語がフィルターの値です。
CQLv3の構文は次のとおりです。
SELECT * | select_expression | DISTINCT partition
FROM [keyspace_name.] table_name
[WHERE partition_value
[AND clustering_filters
[AND static_filters]]]
[ORDER BY PK_column_name ASC|DESC]
[LIMIT N]
[ALLOW FILTERING]
その場合、SQLのようなOR操作を使用することはできません。