CQL - 具有不同列的行

时间:2015-10-28 15:53:38

标签: cassandra datastax cql cassandra-2.0 nosql

是否可以将Cassandra(使用CQL)存储在具有相同列数但具有一个不同列的一个列族中的两行?像这样:

// column family
'users' : {

    // row 1
    'john' : {
        name: 'John',
        lastname: 'Smith',
        email: 'john@gmail.com'
    }

    // 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', 'john@gmail.com');

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 个答案:

答案 0 :(得分:6)

Cassandra有一个稀疏的数据模型。如果您没有为给定的cql行插入值,我们就不会在底层sstable中创建一个单元格。

即。如果你没有说过DROP电子邮件,那么除非你故意插入一个空/墓碑,否则杰克不会有一个空单元格用于发送电子邮件。

您可以使用sstable2json内省sstables来了解数据在磁盘上的布局方式。在尝试此操作之前,请记住使用nodetool flush,否则您最终可能会反省空目录!