CQL - 具有不同列的行
CQL - rows with different columns
是否可以在 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 中创建单元格。
即如果你没有说 DROP email,除非你故意插入一个 null / tombstone,否则 Jack 不会有一个空的电子邮件单元格。
您可以使用 sstable2json
内省 sstables 以了解数据在磁盘上的布局方式。请记住在尝试之前使用 nodetool flush
,否则您可能最终会检查一个空目录!
是否可以在 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 中创建单元格。
即如果你没有说 DROP email,除非你故意插入一个 null / tombstone,否则 Jack 不会有一个空的电子邮件单元格。
您可以使用 sstable2json
内省 sstables 以了解数据在磁盘上的布局方式。请记住在尝试之前使用 nodetool flush
,否则您可能最终会检查一个空目录!