我刚刚安装了 Cassandra 数据库,因为正如我所见,它提供了在表中动态创建新列的功能,而无需更改它 但是当我制作一个虚拟插入时:
INSERT INTO mytable (id, name, age, description) VALUES (uuid(), 'John Doe', 25, 'Test');
如果 mytable 有 id、name、age 并且没有描述列,它会返回错误:
InvalidRequest: Error from server: code=2200 [Invalid query] message="Undefined column name description in table mykeyspace.mytable"
不是应该在mytable中动态创建描述列吗?
不是应该在mytable中动态创建描述列吗?
不。人们普遍误解 Cassandra 是“无模式”的,而实际上它确实需要并强制执行模式。最初,Apache Cassandra 支持无模式键/值方法来表示数据,但现在已经有好几年了。
在您的情况下,您需要定义与此类似的表:
CREATE TABLE mykeyspace.mytable (
id UUID,
name TEXT,
age INT,
description TEXT,
PRIMARY KEY(id)
);
尽管说实话,除非您打算通过
id
(UUID)查询该数据,否则使用 PRIMARY KEY(name,id)
的主键定义可能是更好的方法。这将允许通过 name
列进行查询。
如果不存在
description
列,它不会在mytable
内自动为您创建它。
你可以做,
ALTER TABLE mytable ADD description TEXT;
并且带有
description
列的 INSERT 将再次开始工作。