【问题标题】:CQL - rows with different columnsCQL - 具有不同列的行
【发布时间】:2016-01-28 12:02:19
【问题描述】:

是否可以在 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

【问题讨论】:

  • 我不明白你的问题。 “相同的列数量但有一个不同的列”是什么意思?也许阅读 cassandra 的稀疏数据模型。基本上,如果您不为给定的 cql 行插入值,我们将不会在基础 sstable 中创建单元格。 IE。如果你没有说 DROP email,Jack 不会有一个空单元格用于电子邮件,除非你故意插入一个 null / tombstone。
  • 所以,如果我跳过ALTER TABLE users DROP email;,我会得到 Jack 的电子邮件 null 值,但不会为这一行创建“物理”列,对吗?
  • 是的,使用 sstable2json 进行自省。请记住,您必须冲水才能看到牌桌。
  • 非常感谢,这就是我的意思:) 你可以写答案,我会接受的。

标签: cassandra datastax cql cassandra-2.0 nosql


【解决方案1】:

Cassandra 具有稀疏数据模型。如果您不为给定的 cql 行插入值,我们将不会在基础 sstable 中创建单元格。

I.E.如果你没有说 DROP email,Jack 不会有一个空的单元格用于电子邮件,除非你故意插入一个 null / tombstone。

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

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 2013-07-15
    • 2018-09-27
    • 1970-01-01
    • 2013-07-15
    • 2015-11-18
    • 2014-12-08
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多