web-dev-qa-db-ja.com

cassandra cqlの2つ以上のテーブルで結合クエリを実行する方法

私はcassandraが初めてです。ここには、2つのテーブルEVENTSTOWERがあります。いくつかのクエリのためにそれらを結合する必要があります。しかし、私はそれを行うことができません。

EVENTSテーブルの構造:

eid int PRIMARY KEY,
a_end_tow_id text,
a_home_circle text,
a_home_operator text,
a_imei text,
a_imsi text,

TOWERテーブルの構造:

 tid int PRIMARY KEY,
 tower_address_1 text,
 tower_address_2 text,
 tower_azimuth text,
 tower_cgi text,
 tower_circle text,
 tower_id_no text,
 tower_lat_d text,
 tower_long_d text,
 tower_name text,

次に、これらのテーブルをEIDTIDに関して結合して、両方のテーブルのデータをフェッチできるようにします。

27
BlueShark

Cassandra =参加なし。モデルは100%リレーショナルです。 Cassandraで再考する必要があります。 これらのスライド をご覧になることをお勧めします。彼らは、cassandraのデータをモデル化する方法を詳しく調べます。また、トピックをカバーする webinar もあります。しかし、リレーションが必要な場合、cassandraは仕事のためのツールではないため、外部キーを考えてテーブルを結合するのはやめてください。

しかし、なぜ?
その後、整合性をチェックし、リレーショナルデータベースが行う他の多くのことを行う必要があるため、cassandra=が提供するパフォーマンスとスケーラビリティを失います。

何ができますか?
非正規化! 1つのテーブルに大量のデータがありますか?しかし、テーブルには列が多すぎます!
そう? Cassandra=テーブル内の非常に多くの列を処理できます。

他にできることは、クライアントアプリケーションで結合をシミュレートすることです。コード内の2つのデータセットを一致させますが、すべての情報を反復処理する必要があるため、これは非常に遅くなります。

別の方法は、複数のクエリを実行することです。目的のイベントを選択してから、一致するタワーを選択します。

61
Lyuben Todorov

Cassandra=でテーブルを結合してクエリを実行する方法はいくつかあります。もちろん、データモデルパーツを再考する必要があります。

  1. Apache SparkのSparkSQL ™とCassandra(オープンソースまたはDataStax Enterprise – DSEのいずれか)を使用します。
  2. DataStaxが提供するODBC コネクタとCassandraおよびDSEを使用します。
5
Mayank Raghav

PlayOrmは、パーティションを結合できる特別なスケーラブルSQL言語を使用して、スケーラブルシステムで結合を行うための優れたオプションです(つまり、10億行と別の10億行を結合したくない)。多数のnoSQLパターンがあり、必要に応じてクライアント側の結合を使用してnoSQLパターンを模倣するために、休止状態およびJPAから完全に分離されています。

0
Dean Hiller