web-dev-qa-db-ja.com

cassandra CQLでの内部結合

Cassandraでサブクエリ/ネストされたクエリを作成するにはどうすればよいですか。この機能はCQLで提供されますか?

私が試した例:

cqlsh:testdb> select itemname from item where itemid = (select itemid from orders where customerid=1);

次のエラーがスローされるだけです-

Bad Request: line 1:87 no viable alternative at input ';'
18

Cassandraはその分散された性質のため、RDBMSスタイルの結合をサポートしていません。結合のようなものが必要な場合にいくつかのオプションがあります。

1つのオプションは、個別のクエリを実行してから、アプリケーションにデータ自体を結合させます。これは、データが比較的小さく、少数のクエリのみを実行する必要がある場合に意味があります。上記の例に基づいて、これはおそらくあなたにとって良い解決策でしょう。

より複雑な結合の場合、通常の戦略は、データを非正規化し、結合のマテリアライズドビューを格納することです。これの利点は、このデータをフェッチする必要があるたびに、アプリケーションで結合を構築するよりもはるかに高速になることです。同じデータを格納する場所が複数あり、すべてを同期しておく必要があるというのがコストです。システムに新しいデータが入ったときにすべてのビューを更新するか、ビューを再構築する定期的なバッチジョブを使用できます。

この記事は役に立ちます: CassandraでSQLをすべて実行するには本当にSQLが必要ですか? 少し古いですが、その原則はまだ適用されます。

27
psanford