2012-10-22 78 views
2

進出口新的卡桑德拉和我試着去創建一個模式,這將讓我有一個行作爲卡桑德拉:創建的CompositeType列

users: { 
    name: <value>, 
    ... 
    phone_numbers:1: <value>, 
    phone_numbers:2: <value>, 
    ... 
    phone_numbers: <value> 
} 

我一直在閱讀了關於組合柱,並只能夠找到主鍵是組合的例子。那麼是否有可能在一個CF上面有上述內容?

我的嘗試是: -

create column family users with comparator=AsciiType 
and key_validation_class=AsciiType 
and column_metadata=[ 
{column_name: name, validation_class: AsciiType, index_type: KEYS}, 
{column_name: phone_numbers, validation_class: CompositeType(AsciiType, IntegerType), index_type: KEYS}]; 

上面的失敗。 任何幫助理解 歡呼聲

回答

1

的CompositeType在卡桑德拉不僅可以被用來作爲comparator [列名的類型]或者key_validation_class [行鍵的類型]但不作爲default_validation_class [列值的類型]

create column family users with 
comparator='CompositeType(UTF8Type, IntegerType)' 
and key_validation_class='UTF8Type' 

應該適合你。我已經在卡桑德拉複合類型的共享的詳細post

+0

因此將最好的方式來設計我的模式是兩個的CF?一個用於比較= AsciiType和第二個CF的用戶是帶comparitor = CompositeType(AsciiType,IntegerType)的user_phone_numers? – krone

+0

我以爲你的OP是regd創建CompositeTypes:P Incase你需要一些模式的幫助嘗試描述你的用例和讀取,寫入模式 – Tamil

1

在CQL 3你可以聲明爲:(使用類型ASCII爲了簡單起見)

創建表的用戶(用戶ASCII,phoneid ASCII,PHONENUMBER ascii, 主鍵(用戶,電話號碼))與緊湊型存儲;

填補它作爲

插入到用戶(用戶,phoneid,PHONENUMBER值( '約翰·史密斯', '家', '555-121345')

插入到用戶(用戶,phoneid,PHONENUMBER值( '約翰·史密斯', '辦公室', '555-121346')

和檢索它作爲

SELECT * FROM用戶,其中用戶= '約翰·史密斯'

用戶,phoneid,PHONENUMBER

'約翰·史密斯', '家', '555-121345'

'約翰·史密斯',」辦公室」,‘555-121346’

希望它可以幫助

+1

這有助於很多,所以我仍然只能通過一個鍵的一部分搜索,但有複合鍵允許我存儲數組。 – krone