2013-06-22 93 views
21

我是cassandra的新手。在這裏,我有兩個表EVENTSTOWER。我需要加入這些查詢。但我無法做到這一點。如何在cassandra中使用2個或多個表進行連接查詢cql

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,這樣我可以獲取的數據

結構EVENTS表兩個表。

+0

的[內蒙古加盟卡桑德拉CQL(https://stackoverflow.com/questions/16790297/inner-join-in-cassandra-cql) – Raedwald

回答

52

Cassandra = No Joins。你的模型是100%關係。你需要重新考慮Cassandra。我建議你看看these slides。他們深入研究如何爲cassandra建模。另外這裏是涵蓋該主題的webinar。但停止考慮外鍵和連接表,因爲如果你需要關係cassandra不是工作的工具。

但是爲什麼?
因爲那麼您需要檢查一致性並執行關係數據庫所做的其他許多事情,因此您將失去cassandra提供的性能和可伸縮性。

我該怎麼辦?
DENORMALIZE!一張桌子上有很多數據?但是桌子會有太多列!
那麼? Cassandra可以處理表格中的大量列。

您可以做的另一件事是模擬客戶端應用程序中的連接。匹配代碼中的兩個數據集,但這會非常緩慢,因爲您必須遍歷所有信息。

另一種方法是進行多個查詢。選擇你想要的事件,然後選擇匹配的塔。

+0

是沒關係redundunt數據存儲在我的卡桑德拉表可能的複製?例如,我有一個user_detail表和一個評論表。這兩個表都有一個公共列user_id。什麼是更好的做事方式。我應該在我的評論表中存儲多餘的數據,以便我不需要查詢其他表? –

+0

'另一種方法是執行多個查詢。選擇你想要的事件,然後選擇匹配的塔。'這是否意味着做兩個SELECT查詢,例如從table1中選擇id,然後執行SELCT col1,col2 FROM table2其中col3 = ?這是根據卡桑德拉的數據模型嗎? – manish

0

PlayOrm是使用特殊的可擴展SQL語言在可伸縮系統上進行連接的好選擇,您可以在其中連接分區(即,您不希望再連接10億行的10億行)。它有大量的noSQL模式,並且是休眠和JPA的徹底突破,以便在需要時通過客戶端連接模擬noSQL模式。

5

有幾種方法可以將表連接在Cassandra中並查詢它們。但是,當然你必須重新考慮數據模型部分。

  1. 使用Apache Spark’s SparkSQL™與Cassandra(無論是開源還是在DataStax Enterprise - DSE中)。
  2. 使用DataStax provided ODBC連接器與Cassandra和DSE。
相關問題