Cassandra 复合列的原因是什么?必须至少有一列不是主键的一部分

Cassandra 复合列的原因是什么?必须至少有一列不是主键的一部分,cassandra,cql,Cassandra,Cql,从在线文档: CQL 3表的主键可以有任意数量的1个或多个组件列,但必须至少有一列不是主键的一部分 原因是什么 我试图在CQL中插入一行,其中的列位于复合键中。当我选择时,我看不到它 cqlsh:demo> CREATE TABLE DEMO ( user_id bigint, dep_id bigint, created timestamp, lastupdated timestamp, PRIMARY KEY (user_id, dep_id)

从在线文档: CQL 3表的主键可以有任意数量的1个或多个组件列,但必须至少有一列不是主键的一部分

原因是什么

我试图在CQL中插入一行,其中的列位于复合键中。当我选择时,我看不到它

cqlsh:demo> CREATE TABLE DEMO ( 
user_id bigint,
    dep_id bigint,
    created timestamp,
    lastupdated timestamp,
    PRIMARY KEY (user_id, dep_id)
     );

cqlsh:demo> INSERT INTO DEMO (user_id, dep_id)
     ...   VALUES (100, 1);

cqlsh:demo> select * from demo;


 cqlsh:demo>
但当我使用cli时,它会显示一些内容:

default@demo] list demo;
Using default limit of 100
Using default column limit of 100
-------------------
RowKey: 100

1 Row Returned.
Elapsed time: 27 msec(s).
但是看不到列的值

在我添加不在主键中的列之后,该值显示在CQL中

 cqlsh:demo> INSERT INTO DEMO (user_id, dep_id, created)
         ...   VALUES (100, 1, '7943-07-23');
  cqlsh:demo> select * from demo;
  user_id | dep_id | created                  | lastupdated
  ---------+--------+--------------------------+-------------
   100 |      1 | 7943-07-23 00:00:00+0000 |        null
CLI的结果:

 [default@demo] list demo;
 Using default limit of 100
 Using default column limit of 100
  -------------------
 RowKey: 100
 invalid UTF8 bytes 0000ab7240ab7580
 [default@demo]
有什么想法吗?
更新:我找到了CLI返回无效UTF8字节0000ab7240ab7580的原因,它与从CQL3创建的表不兼容,如果我使用压缩存储选项,该值在CLI中正确显示。

实际上,非键值是使用组成行键和列名的主键值保存的。如果不插入任何非键值,则实际上不会创建任何新的列族列。row键来自第一个主键,这就是为什么Cassandra能够为您创建新行,即使没有使用它创建列

这一限制在Cassandra 1.2中得到了修复,现在已经是beta版了。

在进一步挖掘之后,确实添加了行,但是如果我使用SELECT*FROM tableName,它不会返回,除非我添加了一个不属于主键的列。好吧,在RDBMS世界中,您可以插入只有键列的行。在我的例子中,我需要的都可以放在复合列中,所以我必须添加一个虚拟列?您指的是哪一部分?是否添加仅包含主键列的行?或者使用CLI查看使用CQL3创建的表?或者两者都有:?