2013-07-18 53 views
2

我想用CQL3查詢具有類似的結構在卡桑德拉創建表:在卡桑德拉CQL3創建複合列鍵/名

myTable 
     myTable_uuid 
      <key_1|second_key_1> : <value_1>, 
      <key_1|second_key_2> : <value_2>, 
      <key_1|second_key_3> : <value_3>, 
      <key_2|second_key_4> : <value_4>, 
      <key_2|second_key_5> : <value_5>, 
      <key_2|second_key_6> : <value_6> 
      PRIMARY KEY(myTable_uuid, first_key_1, first_key_2, second_key_1) 

表/ CF的名字是「mytable的」和myTable_uuid是行鍵。此外,我想使用CQL3創建組合列鍵,以便能夠對數據進行分組(key_1和key_2組成組)。這是否支持?如果是的話,有人可以用示例CQL3查詢或語法來幫助我。

目的:我試圖設計CFs,使得數據/值在邏輯上分組,就像在Cassandra在ebay博客(http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/)中解釋的數據模型。

UPDATE

我設計牢記我的申請,需要查詢。我應該用現實生活中的查詢,而不是假的,但在這裏就是我想實現:

myTable 
     myTable_uuid 
      <email|fname> : <value_1>, 
      <email|lname> : <value_2>, 
      <email|age> : <value_3>, 
      <email|timestamp> : <value_4>, 
      <shool_id|school_name> : <value_5>, 
      <shool_id|zip_code> : <value_6> 
      PRIMARY KEY(myTable_uuid, email, school_id, school_name) 

<email|fname> , <email|lname>, <email|age>, <shool_id|school_name> and <shool_id|zip_code>將表現爲「組合柱鍵」,而不是行鍵,表中有「myTable_uuid '因爲它是行鍵。這種方法將幫助我將數據分組爲「email」和「school_id」。我如何創建'複合列鍵'並且僅支持基於複合CK中的1個查詢?例如:

SELECT fname, age WHERE email = '[email protected]'

我使用卡桑德拉1.2.6和CQL3。任何幫助表示讚賞。

回答

4

是的,這是支持的。 CQL3支持所有功能。 (除了刪除列以外,這個問題很快就會解決,同時也不會佔用很多存儲空間,而且是脫離主題的)。

在CQL3中,通過將複合列鍵添加到主鍵子句中來創建複合列鍵。給定的第一個鍵形成行鍵,所有後面的列形成一個(複合)列鍵。此blog entry explains it really well.

CREATE TABLE myTable 
(
    myId uuid, 
    key_1 varchar, 
    key_2 varchar, 
    value varchar, 
    PRIMARY KEY (myId, key_1, key_2) 
); 

因此,MYID將分區鍵和key_1和key_2將「組」的數據,並形成複合列密鑰。

希望有所幫助。

+1

如果你想創建一個複合主鍵,例如爲了避免出現熱點,你可以把這個鍵放到括號裏,如下所示: 'PRIMARY KEY((myId,myId2)key_1,key_2)' – omnibear

+0

謝謝@omnibear,if我提到'((myId,myId2)key_1,key_2)'定義了一個主要組合鍵,我仍然可以使用只有myID查詢而不指定myId2嗎?或者,CQL3會迫使我使用兩個組合鍵的鍵? – user988544

+1

您不會這樣做,因爲您正在分佈式環境中工作,在寫入期間保留了訂單。實際上,這意味着: 1)如果給出其他密鑰,則總是需要給出分區密鑰。 2)用於查詢組合鍵:行鍵中的第一部分需要an =運算符,second an =或「IN」;如果你再看看ebay博客,他們會提出「桶」,預定義的整數值,你可以將它添加到使用「IN」運算符進行查詢。祝你好運! – omnibear

0

我想你想要的是有key_1key_2map類型按照支持data types in CQL3

+0

嗯,我想我可以使用地圖類型,地圖類型是否允許組合列鍵? – user988544

0

你應該首先考慮一下你需要執行的查詢。然後考慮桌面設計。但不要先考慮表格設計。從你的問題來看,你不清楚要執行哪些查詢。我可以想出許多這種桌子設計根本不適合的查詢。

如果你的問題是關於一些技術細節....那麼,是的,卡桑德拉支持複合主鍵。

如果你在這裏寫下你的問題,你可以得到更有價值的反饋。

+0

我剛剛更新了我的問題。 – user988544