2015-10-28 16 views
1

是否可以在Cassandra(使用CQL)中存儲具有相同列數但具有一個不同列的一列家族中的兩行?事情是這樣的:CQL - 具有不同列的行

// column family 
'users' : { 

    // row 1 
    'john' : { 
     name: 'John', 
     lastname: 'Smith', 
     email: '[email protected]' 
    } 

    // row 2 
    'jack' : { 
     name: 'Jack', 
     lastname: 'Sparrow', 
     age: 33 
    } 
} 

我目前的CQL代碼:

CREATE KEYSPACE people WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; 
USE people; 

CREATE COLUMNFAMILY users (
    username varchar PRIMARY KEY, 
    name varchar, 
    lastname varchar, 
    email varchar 
); 

INSERT INTO users (username, name, lastname, email) VALUES ('john', 'John', 'Smith', '[email protected]'); 

ALTER TABLE users DROP email; 
ALTER TABLE users ADD age int; 

INSERT INTO users (username, name, lastname, age) VALUES ('jack', 'Jack', 'Sparrow', 33); 

SELECT * FROM users; 

OUTPUT: 

username | age | lastname | name 
----------+------+----------+------ 
    john | null | Smith | John 
    jack | 33 | Sparrow | Jack 
+1

我不明白你的問題。 「相同的色譜柱數量,但有一個不同的色譜柱是什麼意思?」也許閱讀cassandra的稀疏數據模型。基本上,如果不爲給定的cql行插入值,我們將不會在底層sstable中創建單元。 I.E.如果你沒有說DROP電子郵件,除非你故意插入空白/墓碑,否則傑克不會有空單元格的電子郵件。 – phact

+0

所以,如果我跳過'ALTER TABLE用戶DROP電子郵件;'我會得到傑克的電子郵件空值,但在物理上「這一列不會創建這一行,我是對的? – Bakus123

+1

是的,使用sstable2json來內省。請記住,您必須刷新以查看錶格。 – phact

回答

5

卡桑德拉有稀疏的數據模型。如果不爲給定的cql行插入值,我們不會在底層sstable中創建單元格。

I.E.如果你沒有說DROP電子郵件,除非你故意插入空白/墓碑,否則傑克不會有空單元格的電子郵件。

您可以使用sstable2json來反思sstables,以瞭解數據在磁盤上的佈局方式。請記住在嘗試使用之前使用nodetool flush,否則最終可能會反思一個空目錄!