我使用Cassandra
作爲一個項目,這是我的第一個項目。 ,我試圖做兩個表的一個簡單的請求,但是,這並不工作...在卡桑德拉的兩張桌子上選擇
我想要做的事,如:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否有可能要求在Cassandra
的兩張桌子上?我該怎麼做?
感謝
我使用Cassandra
作爲一個項目,這是我的第一個項目。 ,我試圖做兩個表的一個簡單的請求,但是,這並不工作...在卡桑德拉的兩張桌子上選擇
我想要做的事,如:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否有可能要求在Cassandra
的兩張桌子上?我該怎麼做?
感謝
我試圖做兩個表
一個簡單的要求是什麼,你現在要做的是被稱爲「分佈式連接」和Cassandra是專爲阻止你這樣做。
解決這些類型問題的方法是使用稱爲非規範化的過程。比方說,你有簡單的兩個表carMake
和carModel
:
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次。carid
作爲PRIMARY KEY的一部分添加,以確保每個model
的唯一性,否則每個make
的INSERT都會覆蓋自身。因此,對於我的項目我可以有一個集合,這個集合可以有產品,而這個產品具有屬性,但是例如在一個集合中,產品將具有所有屬性可見,而在其他集合中,產品將只有兩個屬性可見。但是我要做什麼桌子?現在爲一個表集合,collection_contains,collection_attributs,products和products_contains,但我這樣做像傳統的RDBMS ... – Kreepz
請詳細解釋您的問題!你想從一個請求中的表中選擇嗎?你需要像'SELECT * from table1 and table2'這樣的東西嗎?或從表1中選擇*,從表2中選擇* *?你能寫出你的目的嗎? –
以及我想你想加入表格!你應該讀這個:http://stackoverflow.com/questions/17248232/how-to-do-a-join-queries-with-2-or-more-tables-in-cassandra-cql –