2015-11-29 44 views
1

我使用Cassandra作爲一個項目,這是我的第一個項目。 ,我試圖做兩個表的一個簡單的請求,但是,這並不工作...在卡桑德拉的兩張桌子上選擇

我想要做的事,如:

Select * from table1, table2 where table1.test = test and table2.test2 = 123;

是否有可能要求在Cassandra的兩張桌子上?我該怎麼做?

感謝

+0

請詳細解釋您的問題!你想從一個請求中的表中選擇嗎?你需要像'SELECT * from table1 and table2'這樣的東西嗎?或從表1中選擇*,從表2中選擇* *?你能寫出你的目的嗎? –

+0

以及我想你想加入表格!你應該讀這個:http://stackoverflow.com/questions/17248232/how-to-do-a-join-queries-with-2-or-more-tables-in-cassandra-cql –

回答

1

我試圖做兩個表

一個簡單的要求是什麼,你現在要做的是被稱爲「分佈式連接」和Cassandra是專爲阻止你這樣做。

解決這些類型問題的方法是使用稱爲非規範化的過程。比方說,你有簡單的兩個表carMakecarModel

makeid | make 
--------+-------- 
     1 | Chevy 
     2 | Dodge 
     3 | Ford 

modelid | makeid | model 
---------+--------+--------- 
     15 |  3 | Focus 
     11 |  3 | Mustang 
     32 |  2 | Charger 
     82 |  3 | Fusion 

現在,在傳統的RDBMS,如果我想選擇所有車型與「福特」我會執行JOIN查詢化妝。但隨着卡桑德拉,這個想法是在建模階段來解決這個問題,通過建立支持在同一時間來查詢汽車的品牌和型號的能力表:

CREATE TABLE carMakeModel (
    carid int, 
    make text, 
    model text, 
    PRIMARY KEY (make,carid)); 

[email protected]:stackoverflow> SELECT * FROM carMakeModel WHERE make='Ford'; 

make | carid | model 
------+-------+--------- 
Ford |  1 | Mustang 
Ford |  2 | Focus 
Ford |  3 | Fusion 

(3 rows) 

一些關鍵點,這裏要注意:

  • make儘可能多地被複制。您會注意到在結果集中指定了「福特」3次。如果您有13個福特車型的數據,則可以將「福特」的價值存儲13次。
  • Cassandra中的主鍵是唯一的。我已將carid作爲PRIMARY KEY的一部分添加,以確保每個model的唯一性,否則每個make的INSERT都會覆蓋自身。
+0

因此,對於我的項目我可以有一個集合,這個集合可以有產品,而這個產品具有屬性,但是例如在一個集合中,產品將具有所有屬性可見,而在其他集合中,產品將只有兩個屬性可見。但是我要做什麼桌子?現在爲一個表集合,collection_contains,collection_attributs,products和products_contains,但我這樣做像傳統的RDBMS ... – Kreepz