将动态Cassandra柱族转换为静态柱族
假设我在Cassandra中有一个列族,它是使用将动态Cassandra柱族转换为静态柱族,cassandra,cql,cassandra-cli,Cassandra,Cql,Cassandra Cli,假设我在Cassandra中有一个列族,它是使用Cassandra cli创建的,如下所示: create column family users with key_validation_class = UTF8Type and comparator = UTF8Type; CREATE TABLE users ( key text, column1 text, value blob, PRIMARY KEY (key, column1) ) WITH COMPACT STOR
Cassandra cli
创建的,如下所示:
create column family users with key_validation_class = UTF8Type and comparator = UTF8Type;
CREATE TABLE users (
key text,
column1 text,
value blob,
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (column1 ASC);
就结构而言,这是一个动态柱族
从CQL3客户端使用描述表用户查看时,如下所示:
create column family users with key_validation_class = UTF8Type and comparator = UTF8Type;
CREATE TABLE users (
key text,
column1 text,
value blob,
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (column1 ASC);
这是预期的行为。我想要的是添加列元数据,以便将列族视为静态的
因此,我使用cassandra cli尝试了以下方法:
update column family users
with column_metadata = [{column_name: email, validation_class: UTF8Type}];
然而,CQL3的最终结果并不是我想要的:
CREATE TABLE users (
key text,
column1 text,
value blob,
email text,
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (column1 ASC);
我期望的结果与我从一开始就使用元数据创建列族时的结果相同:
create column family users2
with key_validation_class = UTF8Type
and comparator = UTF8Type
and column_metadata = [{column_name: email, validation_class: UTF8Type}];
在这种情况下,我想要的是CQL3视图:
CREATE TABLE users2 (
key text PRIMARY KEY,
email text
) WITH COMPACT STORAGE;
是否有某种方法可以将列元数据添加到未创建任何列族的列族中,以便从CQL3查看它,就像创建列族时提供元数据一样?当然,在不重新创建列族的情况下。不可能使用旧的节约API创建静态列。事实上,静态列只是一个技巧,例如,集群值为NULL的列,因此每个分区键只有一个实例
请参阅这两张幻灯片了解说明(抱歉,法语文本):
您应该借此机会迁移到CQLThrift是不推荐使用的,甚至在默认情况下从Cassandra 3.x开始禁用它。查看系统键空间,表模式列族
我认为分区键和集群列的标签存储在那里
也许可以改变它们,但我不知道直接侵入这些元表是否是个好主意
如果有n节点,则可能需要更新所有这些节点上的标签,因为系统键空间具有LocalStrategy
执行此查询以查看实际标签:
SELECT key_aliases,key_validator,column_aliases,comparator
FROM system.schema_columnfamilies
WHERE keyspace_name='xxx'
AND columnfamily_name='users';
我使用的不是静态列,而是每行中都有相同列的列族。术语“静态柱族”是在中定义的。我正在从Thrift迁移到CQL-我只想在CQL查询中拥有比column1
和value
更好的列名。请参阅下面的完整答案感谢为我指明了正确的方向(系统架构表)。从我的问题来看,表users
和users2
之间唯一的显著区别是users
在schema\u column家族中的hashashasis\u dense=False
。然而,除了修改系统表之外,似乎没有简单的方法来做我想做的事情,而且我觉得这样做不舒服。@st_Patrick,你解决了你的问题吗?试图修改系统
表,但未成功。