私はcassandra
を初めて使用し、分析タスクに使用しています(適切なインデックス作成が必要です)。
私はこの投稿(および他の人)を読みました: cassandra、非主キーを介して選択WHERE clause
の非主キー列でDBにクエリを実行することはできません。
そうするために、3つの可能性があるようです(すべて大きな欠点があります):
IN
または=
以外の演算子を使用できません。上記の3つの制約がなくても、私がやろうとしていること(WHERE clause
非主キー列)に他の方法はありますか?
Cassandra自体の中から、上記で指定したオプションに制限されます。理由を知りたい場合は、こちらをご覧ください。
ただし、Cassandra内に保存されている情報に対して分析を実行しようとしている場合は、Sparkの使用を検討しましたか?Sparkは、分散システムでの大規模なデータ処理用に構築されています。実際、SparkとCassandra)の間にいくつかの素晴らしい統合機能があるDatastax( ここ を参照)の使用を検討している場合データのロードと保存用。無料(コミュニティ)版と有料(エンタープライズ)版の両方があります。
クエリでIF
を使用してみてください。
UPDATE [keyspace_name.] table_name
[USING TTL time_value | USING TIMESTAMP timestamp_value]
SET assignment [, assignment] . . .
WHERE row_specification
[IF EXISTS | IF condition [AND condition] . . .] ;
https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/cqlUpdate.html を参照してください。
cassandra 2.xバージョンを使用しているときに、同様の問題が発生しました。バージョンをcassandra 3.0以降にアップグレードしてください。これが私にとって唯一の解決策でした。
クエリを実行するフィールドがパーティショニングキーの一部ではないことを考えると、テーブルは別の目的のために設計されていると思います。私の提案は、テーブルを複製し、クエリを実行するフィールドにキーを付けることです。 データモデリングの概念 に従って、使用する目的に合わせて新しいテーブルを設計することをお勧めします。
Cassandraには、CQLで実行できることに関して特定の制限を課すことにより、線形スケーリングなどのいくつかの利点があります。